[PHP-users 17007]ob_implicit_flushの有効条件は?

Daisuke Asano asano_d @ yamagishi.or.jp
2003年 7月 28日 (月) 18:03:11 JST


麻野です。

PHP上で時間のかかる処理の後ブラウザに出力する際、タイムアウト防止に
ob_implicit_flush(1) を使って、一定時間で画面に文字を出力するプログラム
を作成し、古い環境では安定して利用していたのですが、新しいサーバーで動作
しません。

サーバー1では、PHP上での処理が全て終わらないと出力が始まらず、
処理が長い場合はタイムアウトで落ちて出力結果が表示されません。
サーバー2(古い構成)の方では問題なく動作しています。

今後もこの処理が使えるようにしたいですが、原因がわからず困っています。
ご教授のほど、よろしくお願い致します。

〈詳細〉
以下の2つの環境で、処理を比較してみました。

サーバー1:PHP Version 4.3.2
サーバー2:PHP Version 4.1.2
ブラウザ :IE6, Netscape7.1, Wazilla1.4, Opera7.11

検証のプログラムは、以下のものを使っています。
1秒ごとに、文字列を出力するものです。

test1.php
------------------------------------------------

<html>
<head><title>test</title></head>
<body>
<?php
set_time_limit(0);
ob_end_clean();
echo str_pad('',256);
ob_implicit_flush(TRUE);
for ($aa=0; $aa<6; $aa++) {
    echo $aa."<br>";
    sleep(1);
}
?>
</body>
</html>

------------------------------------------------

〈結果〉
○サーバー1(PHP 4.3.2)
  Netscape7.1, Opera7.11 は1秒ごとに出力された。
  IE6, Wazilla1.4 ではまとめて出力されてしまう。

○サーバー2(PHP 4.1.2)
  上記全てのブラウザで1秒ごとに出力された。

・php.iniの設定を比較してみましたが、よくわかりませんでした。
・flush() に関する過去ログなどもあたってみました。

-- 
Daisuke Asano <asano_d @ yamagishi.or.jp>



PHP-users メーリングリストの案内