ホームページ > バックエンド開発 > PHPチュートリアル > PHP 出力キャッシュ (output_buffering) についての深い理解_PHP チュートリアル

PHP 出力キャッシュ (output_buffering) についての深い理解_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:07:09
オリジナル
1089 人が閲覧しました

最初に PHP の出力順序を明確にします
1.php 出力キャッシュがオンになります: echo,print -> ブラウザ バッファリング -> ブラウザ ディスプレイ
; PHP 出力キャッシュがオンになっていない: echo、print -> サーバー バッファリング -> ブラウザ バッファリング -> ブラウザの表示
ブラウザの出力キャッシュも明確にします: IE は 256 バイト、Chrome と FireFox は 1000 バイトです。これ ブラウザーは、長さまたはスクリプトが終了した場合にのみページにデータを出力します


使用されるいくつかの PHP 設定と API について説明します: 1.php.ini の output_buffering 設定

•Off: PHP 出力キャッシュをオフにすることを意味します
•オン: 無限の出力キャッシュを開きます
•4096: サイズ 4096 バイトの出力キャッシュを開きます


2.php.ini の implicit_flush 設定
• オン: 各出力後の自動フラッシュを示します (エコーなど) , print) flash() 関数を呼び出した後、直接出力します
•Off: On とは対照的に、各出力後に flash() は呼び出されません。サーバーのバッファリングがいっぱいになるまで出力されませんが、flush() を使用できます。 ) 関数をオンにしても問題ありません。より柔軟です


3.ob_flush() 関数: PHP バッファリングからデータを取り出し、サーバーのバッファリングに入れます
4.flush() 関数: サーバーのバッファリングからデータを取り出し、ブラウザのバッファリングに入れます


5.ob_start() 関数: この関数については、オンにすると出力が行われないため、今はあまり知りません。 ob_flush() と flash() を使用しても、output_buffering=Off の場合は、ob_start() を使用しても、データはすぐに出力されないことがわかります。 out_buffering=On の場合、ob_start() を使わなくても出力データは PHP でキャッシュできるので、とりあえず無視します
それでは、コード (output_buffering=4096、implicit_flush=Off に設定)

コードをコピーします コードは次のとおりです:

// ob_start(); // IE キャッシュ 256 バイト; ChromeおよびFF出力のキャッシュに1000バイトのキャッシュがあります
);
ここで出力されるコードは 1 行ずつ出力されます。具体的な原理については、ob_flush() と flash() の関数を参照してください。
これら 2 つの関数のいずれかが欠落している場合、私の設定では、次まで待機する必要があります。 0、1、2、3、4 はすべてキャッシュされ、最終的にまとめて出力されます
最後に、Laruence さんのブログの一部を引用します。皆さんの理解の助けになれば幸いです

マニュアルの ob_flush/flush の説明は出力バッファをリフレッシュするものであり、併用する必要があるため、多くの人に混乱を引き起こす可能性があります...

実際には、異なるオブジェクトに対して動作する場合もあります。

場合によっては、フラッシュは何も行いません。

ob_* 系関数はPHP自体の出力バッファを操作します。

つまり、ob_flush は PHP 自身のバッファをフラッシュすることです。

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

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


1. mod_gzip などの一部の Apache モジュールは、それ自体で出力キャッシュを実行する可能性があります。2. これにより、flush() 関数によって生成された結果がクライアントのブラウザーに送信されなくなります。すぐに。
3.
4. ブラウザでも受信したコンテンツを表示する前にキャッシュします。たとえば、Netscape
5. ブラウザは改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、 タグを受け取るまでテーブル全体は表示されません。
7.
8. Microsoft Internet Explorer の一部のバージョンは、256 バイトを受信した後でのみページの表示を開始するため、これらのブラウザーがページのコンテンツを表示できるようにするには、いくつかの追加のスペースを送信する必要があります。


したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。

もちろん、他の sapi では、flush を呼び出すことはできませんが、コードの移植性を確保するために、次のことをお勧めします。一緒に使ってください。

http://www.bkjia.com/PHPjc/327577.html

www.bkjia.com

http://www.bkjia.com/PHPjc/327577.html技術記事まず、PHP の出力シーケンスを明確にします。 1. PHP の出力キャッシュがオンになっています: echo、print - php Output_buffring - サーバーのバッファリング - ブラウザのバッファリング - ブラウザの表示 2. PHP の出力キャッシュがオンになっていません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート