プロが教える店舗&オフィスのセキュリティ対策術

echo "<p>処理を開始します。しばらくお待ちください…</p>\n";
echo str_pad(" ",4096)."\n";
ob_end_flush();
ob_start("mb_output_handler");
for ( $i = 1; $i <= 3; $i++ ) {
sleep( 2 ); // 時間がかかる処理
echo "<p>". $i * 10 ."件の処理を完了しました</p>\n";
ob_flush();
flush();
}
echo "処理が完了しました\n";

サンプルのプログラムを記述しておきます。

重要な点として、
1.以前は正常に動作していました。
2.サンプル実行で実際の動きを見せるようなっている他サイトも動作しません。
  それらは、おそらく、正常に動作しているのでしょうが・・・・。

このプログラムを実行しているサーバーの問題ではない気がします。
なぜなら、他のサンプルサイトの実行結果も、正常に動作しないからです。
firefox , IE8 どちらも、全ての処理が終わってから、まとめて表示されます。

あらゆる対処方を施しましたが、結果は変わりません。

これは、私のパソコンがおかしいのでしょうか?
パソコン側で設定する事など出来るのでしょうか?

原因や対処方が分かる方がいらっしゃいましたらご教示お願い致します。

A 回答 (2件)

ブラウザの仕様の問題でしょうね。


かならずしも受け取ったデータをすぐに表示するのが効率的というわけでは
ないので、ブラウザ側でためてから出力しているのかもしれません

ajaxなど非同期処理でデータを抽出する方が現実的だと思いますよ
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり、ブラウザの仕様なのでしょうか。
Firefox、IE8ともに、ダメって事ですね。
至急対応したい処理でしたので、とりあえずは他の方法で対処する事にしました。
ですので、ajaxはこれから勉強して今後取り入れたいと思います。
ありがとうございました。

お礼日時:2012/03/03 22:07

http://www.php.net/manual/ja/function.flush.php

より

PHP および PHP が使っている (CGI, Web サーバなどの) バックエンドの書き込みバッファをフラッシュします。 それまでのすべての出力をユーザのブラウザに対して出力しようと試みますが、 注意すべき点があります。

flush() はウェブサーバのバッファリング手法を上書きすることはできません。 また、クライアント側のブラウザでのバッファリングにはなんの影響も及ぼしません。 PHP のユーザレベルでの出力バッファリングの仕組みにも影響を及ぼしません。 つまり、もし ob 出力バッファを使用しているのなら ob_flush() と flush() の両方をコールしなければなりません。

いくつかのサーバ、特に Win32 上ではスクリプトからの出力をブラウザに 結果を送信する前にスクリプトが終了するまでバッファに溜めることがあります。

mod_gzip のような Apache 用のサーバモジュールはそれ自体がバッファリングを行います。 そのため、flush() をコールしても 即時にデータをクライアントに送信しないという結果につながります。 ”
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記ページに従って、何パターンも作成しました、また、mod_gzipの件も対処しましたが
結果は同じでした。
利用しているサーバーのみ、正常に動作しないなら、理解できますが、
他の方がサンプル実行例として記載している、沢山のサイトでも
正常に動作しないという点で、私のパソコンだけが何らかの原因でそうなっているのかと
思った次第です。
結果、違うやり方で、処理する事にしました。
ありがとうございました。

お礼日時:2012/03/03 22:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!