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

藏色散人
リリース: 2023-04-07 22:34:02
転載
2650 人が閲覧しました

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

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

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