ホームページ  >  記事  >  バックエンド開発  >  ob_flushとflushの違いの深い理解(ob_flush()とflush()の使い方)_PHPチュートリアル

ob_flushとflushの違いの深い理解(ob_flush()とflush()の使い方)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:13:48985ブラウズ

phpでのob_flush()とflush()の使い方について

注意: ob_flush() とフラッシュ() の 2 つの関数は、通常、最初に ob_flush()、次にフラッシュ() という順序で使用されます。
ここでは、リフレッシュ バッファーを使用するタイミングと、バッファーをリフレッシュする理由について詳しく説明します。

1. バッファを更新するタイミング

2 つの関数 file_get_contents() と file_put_contens() がプログラムで使用される場合、またはプログラムが同様の「読み取りおよび書き込み」関数を実行するか、ブラウザーへの出力操作を実行する場合、ob_flush() と flash() が使用されます。バッファー。

2. バッファをリフレッシュする理由

file_get_contents() と file_put_content() を例として説明します。

2 つの関数 file_get_contents() と file_put_conents() は、それぞれデータの読み取り操作と書き込み操作を実行します。これは、読み取り速度が書き込み速度よりも速いためです。データが読み取られても、データが書き込まれたことを意味するわけではありません。実際には、読み取られた内容はバッファ (メモリ) に置かれることになります。非常に速いアクション。

また、(プログラムがブラウザーへの出力操作を実行するとき) と説明しましたが、個々の Web サーバー プログラム、特に Win32 での Web サーバー プログラムは、結果をブラウザーに送信する前に、プログラムの終了までスクリプトの出力をキャッシュします。 。プログラムを実行後にのみブラウザに出力したくない場合は、ob_flush() と flash() を使用してキャッシュを更新することもできます。

実際、flush() には別の用途があります。それは、プログラムが終了する前に出力することです。つまり、ループが終了する前に結果の一部をブラウザーに出力できます。この効果は、ajax の非同期送信効果と非常によく似ています。 。

ob_flush と flash の違いを詳しく理解してください

マニュアルの ob_flush/flush の説明では、両方とも出力バッファをリフレッシュし、一緒に使用する必要があるため、多くの人に混乱を引き起こすでしょう...

実際には、両者の動作はオブジェクトが異なります。場合によっては、flush は何も実行しません。

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

そこで、ob_flush はバッファを更新します。

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

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

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

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

Microsoft Internet Explorer の一部のバージョンは、256 バイトを受信した後にのみページの表示を開始するため、これらのブラウザーがページのコンテンツを表示できるようにするには、いくつかの追加のスペースを送信する必要があります。したがって、最初に ob_flush を使用するのが正しい順序です。 、その後、フラッシュします

もちろん、他の sapi ではフラッシュを呼び出すことはできませんが、コードの移植性を確保するために、フラッシュを併用することをお勧めします

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326450.html技術記事 PHP での ob_flush() とフラッシュ() の使用方法に関する注意: 通常、2 つの関数 ob_flush() とフラッシュ() の順序は、最初に ob_flush()、次にフラッシュ() です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。