PHP は時間のかかるスクリプトを実行し、コンテンツをリアルタイムで出力します

藏色散人
リリース: 2023-04-07 17:46:02
転載
2009 人が閲覧しました

このような要求が時々あります。時間のかかるスクリプトを実行する場合、データはスクリプトの実行後にのみ出力されます。処理されない場合は、ページに出力されたコンテンツが処理されるまでメモリにキャッシュされます。処理されます。後で実行されます。ここでは、リアルタイム出力が必要です。

flush — 出力バッファをフラッシュします

PHP が実行される環境 (CGI、Web サーバーなど) に関係なく、PHP プログラムのバッファをフラッシュします。 。この関数は、これまでのプログラムの出力をすべてユーザーのブラウザに送信します。

flush() 関数は、サーバーまたはクライアント ブラウザーのキャッシュ モードには影響しません。したがって、出力バッファをフラッシュするには、ob_flush() 関数と flash() 関数の両方を使用する必要があります。

個々の Web サーバー プログラム、特に Win32 での Web サーバー プログラムは、結果をブラウザーに送信する前に、プログラムの終了までスクリプトの出力をキャッシュします。

mod_gzip などの一部の Apache モジュールは、それ自体で出力キャッシュを実行する場合があるため、flush() 関数によって生成された結果がクライアント ブラウザにすぐに送信されなくなります。

ブラウザでも、受信したコンテンツを表示する前にキャッシュします。たとえば、Netscape ブラウザは、改行または HTML タグの始まりを受け取るまでコンテンツをキャッシュし、 タグを受け取るまでテーブル全体を表示しません。

Microsoft Internet Explorer の一部のバージョンは、256 バイトを受信した後にのみページの表示を開始するため、これらのブラウザがページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。

リアルタイム出力が必要な場合は、2 つのコア関数 ob_flush、flush;

<?php
 // echo phpinfo();
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){
    echo "<br> Line to show.";
    echo str_pad(&#39;&#39;,4096)."\n";
    ob_flush();
    flush();
    sleep(2);
}
echo "Done.";
ob_end_flush();
ログイン後にコピー

推奨: "PHP ビデオ チュートリアル "

以上がPHP は時間のかかるスクリプトを実行し、コンテンツをリアルタイムで出力しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート