ブラウザ(IE7)のタイムアウトを防ぐ方法。

ブラウザ上のリンクをクリックすることで大容量データ処理を開始する、という
プログラムを組んでいるのですが。
あまりにデータ量が多すぎて、ブラウザのタイムアウト(画面が真っ白)が起こること、しばしば…


これを防ぐには以下のような方法があります。

  1. set_time_limit関数を使って、実行時間を延ばす。
  2. ob_end_clean関数を使って、出力をバッファリングしないようにする。
  3. str_pad関数を使ってパケットを送る(IE用)。
  4. flush関数を使って、出力をフラッシュする。

1については既に試していたのですが、

set_time_limit(0);

…とすると、待ち時間が無制限になります(・∀・)


さて、2〜4を順次見ていくと…。
3について。

echo str_pad('', 256);

IEでは256バイトを超えると出力が表示されるようになるので、わざと
256バイト分の空文字を出力するようにする、というもの。

for(){


 for(){

 // 重い処理…

 }


 // ブラウザのタイムアウト対策
 ob_end_clean();
 echo str_pad('',256);
 flush();
}

※2010-04-16追記

IE7だけでなく、IE8やFirefoxにも適用できました。
これらのブラウザにはあらかじめ、タイムアウトまでの時間が設定してあるようです。
Firefoxについては、アドレスバーに

about:config

と入力することで設定画面を開くことが出来るようになりますが、

network.http.keep-alive.timeout

という項目が件の時間にあたります(秒数指定)。


IE8については、よく分かりません。
(レジストリを書き換えないといけないという情報が…)