ホームページ  >  記事  >  php教程  >  PHPのob_flushとflushの違いについて簡単に説明しましょう

PHPのob_flushとflushの違いについて簡単に説明しましょう

高洛峰
高洛峰オリジナル
2016-12-22 16:34:191043ブラウズ

マニュアルで説明されている

ob_flush/flush は両方とも出力バッファをフラッシュするものであり、一緒に使用する必要があるため、多くの人に混乱を引き起こす可能性があります...

実際、場合によっては、flush は異なるオブジェクトに対して動作します。 all. 物事...

ob_* シリーズ関数は、PHP 自体の出力バッファを操作します。

そのため、ob_flush は PHP 自身のバッファを更新します。

そして、フラッシュは、厳密に言えば、PHP が Apache モジュールとして使用されている場合にのみ使用できます。 (ハンドラーまたはフィルター) は、インストールされた場合にのみ実際の効果を持ちます。WebServer のバッファー (特に Apache を参照すると考えられます) をリフレッシュします。

Apache モジュールの sapi の下で、flush メンバー関数が間接的に呼び出されます。 apache の API を呼び出す: ap_rflush は Apache の出力バッファを更新します。もちろん、マニュアルには、このアクションの結果を変更する可能性のある他の A​​pache モジュールがあるとも記載されています...

mod_gzip などの一部の Apache モジュールは、自分で実行 出力キャッシュ。これにより、flush() 関数によって生成された結果がクライアントのブラウザーにすぐに送信されなくなります。 ブラウザでも、受信したコンテンツを表示する前にキャッシュします。たとえば、Netscape ブラウザは、改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、f16b1740fad44fb09bfe928bcc527e08 タグを受け取るまでテーブル全体を表示しません。

Microsoft Internet Explorer の一部のバージョンは、256 バイトを受信した後にのみページの表示を開始するため、これらのブラウザーがページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。 したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。もちろん、他の sapi では、flush を呼び出さなくても問題ありません。ただし、コードの移植性を確保するために、これらを使用することをお勧めします。

flush と ob_flush 出力バッファーのリフレッシュを妨げる特別な考慮事項がいくつかあります。

1. フラッシュと ob_flush の正しい順序は、次のようになります。
ob_flush();
Web サーバーのオペレーティング システムが Windows システムの場合は、順序を逆にします。 ob_flush() を使用しなくても問題は発生しません。ただし、Linux システムでは、出力バッファをフラッシュできません。

2. ob_flush() を使用する前に、前のコンテンツのサイズが 4069 文字に十分であることを確認してください。


一部のWebサーバーのデフォルトのoutput_bufferingは4069文字以上です。つまり、サーバーが出力バッファをフラッシュする前に、出力コンテンツが4069文字に達する必要があります。フラッシュを確実に効果的に行うには、 ob_flush() 関数の前に次のステートメントを追加します:

print str_repeat(" ", 4096);
を使用して、output_buffering 値に到達することを確認します。

<?php
for ($i=1; $i<20; $i++)
{
echo "<font size=&#39;10&#39; color=&#39;red&#39;>".$i."</font>";
echo &#39;<br>&#39;;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?>

PHP における ob_flush と flash の違いに関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。