ホームページ  >  記事  >  バックエンド開発  >  PHP は時間のかかるスクリプトを実行し、コンテンツをリアルタイムで出力します

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

藏色散人
藏色散人転載
2019-10-24 14:22:071988ブラウズ

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

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

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

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

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

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

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

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。