0

flush();少なくとも Google/Stackoverflow が教えてくれることからはうまくいくと思いましたが、私の Windows WAMP (Windows、Apache、MySQL、PHP) システムではうまくいきません。

flush() を機能させるために設定しなければならない PHP 設定はありますか?

これが私のコードです:

<?php
echo "Fun";

flush();

sleep(5);

echo "<br>Mo";
?>

スクリプトの実行が完了すると (5 秒後)、コードはすべてまとめて出力されます。これは望ましくありません。「Fun」がすぐに表示され、5 秒後に「Mo」が表示されるようにしたいのです。

フラッシュの他の組み合わせを試しましob_end_flush(); or ob_implicit_flush(true);たが、何も機能していません。何か案は?

4

6 に答える 6

7

それが私が見つけたものです:

Flush は Apache の mod_gzip または Nginx の gzip では機能しません。これは、論理的にはコンテンツを gzip 圧縮するためであり、そのためにはコンテンツをバッファリングして gzip する必要があるためです。あらゆる種類の Web サーバーの gzip 圧縮がこれに影響します。つまり、サーバー側で gzip を無効にし、fastcgi バッファー サイズを減らす必要があります。そう:

  • php.ini で:

    . output_buffering = オフ

    . zlib.output_compression = オフ

  • nginx.conf で:

    . gzip オフ;

    . proxy_buffering オフ;

特にphp.iniにアクセスできない場合は、次の行も手元に置いてください。

  • @ini_set('zlib.output_compression',0);

  • @ini_set('implicit_flush',1);

  • @ob_end_clean();

  • set_time_limit(0);

最後に、お持ちの場合は、次のコードにコメントを付けてください。

  • ob_start('ob_gzhandler');

  • ob_flush();

PHP テスト コード:

ob_implicit_flush(1);

for($i=0; $i<10; $i++){
    echo $i;

    //this is for the buffer achieve the minimum size in order to flush data
    echo str_repeat(' ',1024*64);

    sleep(1);
}
于 2011-02-12T15:26:20.610 に答える
5

このスクリプトは CLI から正常に動作し、「Fun」と表示され、5 秒待ってから「<br>Mo」と表示されます。

ブラウザーの場合、次の理由により、結果が少し異なる場合があります。

  1. ブラウザはすぐにレンダリングを開始しません。HTML ドキュメントの 3 バイトのデータを取得するだけでは何もできないため、おそらくあと数バイト待つことになります。
  2. lib レベルでの暗黙的な IO バッファリングは、改行が受信されるまでアクティブになる可能性が高くなります。

回避するには、1) テストに text/plain コンテンツ タイプを使用します。もちろん、実際の HTML データに text/plain を使用することはecho "Fun\n";ありません。echo "<br>Mo\n";

于 2010-08-14T11:33:30.503 に答える
3

CGI/FastCGI を使用している場合は、忘れてください。これらはフラッシュを実装しません。Web サーバーには独自のバッファーがある場合があります。

次のコマンドを使用して、PHP のすべての出力バッファリングを無効にすることができます。

ob_implicit_flush();
于 2010-08-14T11:45:15.540 に答える
1

明示的に設定しても問題が解決しない場合

implicit_flush = yes 

あなたのphp.iniで、あなたも設定したいかもしれません

output_buffering = off

私の場合はこれでうまくいきました(4時間以上髪を引っ張った後)

于 2011-01-22T15:19:52.873 に答える
0

php.ini を確認してくださいoutput_buffering

于 2010-08-14T11:19:44.570 に答える
0

たぶん問題はここの Apache にあり、これにもバッファがある可能性があります...

于 2010-08-14T11:26:29.397 に答える