ホームページ  >  記事  >  バックエンド開発  >  PHP の Output_buffering に関する簡単な説明、phpoutputbuffering_PHP チュートリアル

PHP の Output_buffering に関する簡単な説明、phpoutputbuffering_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:46:36949ブラウズ

PHP の Output_buffering と phpoutputbuffering についての簡単な説明

1. PHP のキャッシュとは何かについて話しましょう。

PHPでは、キャッシュをクライアント側キャッシュ(ブラウザキャッシュ)とサーバー側キャッシュ(サーバーキャッシュ)に大別できます。 PHP は B/S アーキテクチャに基づいているため、ブラウザ側キャッシュとサーバー側キャッシュとして理解できます。
PHP に付属しているサーバー側のキャッシュは、大きく 2 種類のキャッシュに分けられます。プログラムキャッシュとOBキャッシュ!これは、サーバーサイド キャッシュの研究の主要な内容でもあります。

PHP でキャッシュされた出力順序は次のとおりです:
PHP 出力バッファリングがオンになります: echo,print -> サーバー バッファリング ->

PHP 出力キャッシュがオンになっていません: echo,print -> ブラウザーのバッファリング ->

ブラウザ出力キャッシュ: IE の場合は 256 バイト、Chrome および FireFox の場合は 1000 バイト。出力データがこの長さに達するか、スクリプトが終了した場合にのみ、ブラウザはページにデータを出力します。

2. サーバー側の応答プロセス

A. クライアントはリクエスト応答をサーバーに送信します。

B. Apache サーバーは PHP モジュールをロードし、対応するプロセス (またはスレッド) を開始し、対応する PHP スクリプト ページを実行します。

C. OB キャッシュがオンになっていない場合、すべての実行結果はプログラム キャッシュに配置され、パッケージ化されてブラウザに送信されます。ブラウザはページをレンダリングし、最後に見た WEB ページを生成します。
D. OB キャッシュがオンになっている場合、実行結果は OB キャッシュとプログラム キャッシュにそれぞれ格納され、プログラムが最後の行まで実行されると、OB キャッシュ内のデータがプログラム キャッシュにフラッシュされます。をパッケージ化してブラウザに返します。ブラウザはページをレンダリングし、私たちが見ている WEB ページを生成します。

3. OB キャッシュの一般的な使用法!

a、output_buffering=4096、出力するデータが少なくなります (バッファー 1 つ未満)

リーリー

実行結果: データが 1 つのバッファ サイズに満たないため、すべてのスクリプトが完了した後でのみ出力されます。

b、output_buffering=4096、出力するデータを少なくします(バッファーが 1 つ未満)、output_buffering をオフにし、php.ini の Output_buffering=0 を変更します

リーリー

実行結果: OB が無効になっているため、出力する前にスクリプトの実行を待つ必要はなく、データは OB に残らず、断続的な出力が表示されます。エコー -> ブラウザのバッファリング -> ブラウザの表示

c、output_buffering=4096、より大きなデータ (1 つのバッファーより大きい) を出力、ob_start() を使用しないでください

リーリー

実行結果:f.txtは4kbを超えるファイルです。バッファの容量が足りないため、バッファがいっぱいになるたびに出力され、断続的に出力されます。 。

d、output_buffering=4096、より大きなデータ (1 つのバッファーよりも大きい) を出力するには、ob_start() を使用します

リーリー

実行結果: ob_start()を使用しているため、バッファに十分な容量が設定されており、スクリプトが実行されるまで保存され、出力されます。

e、output_buffering=On、ob_start()を使用します

リーリー

実行結果: abc-hello-aa-abc-hello-aa-

f、output_buffering=Off、ob_start() を使用します

リーリー

実行結果: abc-hello-aa-

出力バッファはスタック可能です。つまり、1 つの ob_start() がアクティブなときに、別の ob_start() を呼び出すことができます。 ob_end_flush() を正しい回数だけ呼び出すようにしてください。 複数の出力コールバックがアクティブな場合、出力は常にネストされた順序でフィルター処理されます。

注: PHP5.2 では、OB はデフォルトでオフになり、5.3 以降はデフォルトでオンになります。

一般的に使用される方法:

1.ob_start

Output_buffering メカニズムを有効にします。有効にすると、スクリプトはブラウザに直接出力されなくなり、一時的に PHP バッファリング領域に書き込まれます。スクリプトの実行が完了するまで送信されません。


2.ob_get_contents

php バッファリングでデータを取得します。 注: ob_end_clean() の前に呼び出す必要があります。そうしないと、null 文字のみが取得されます。


3.ob_end_flush と ob_end_clean

ob_end_flush は php バッファリングにデータを出力しますが、クリアしません。

ob_end_clean は出力せず、php バッファリング内のデータをクリアするだけです。

4.ob_flush、フラッシュ、ob_implicit_flush

ob_flush は、PHP バッファリング内のデータをプログラム キャッシュに更新します


flush はプログラム キャッシュをブラウザ キャッシュに更新します

ob_implicit_flush は、絶対的 (暗黙的) フラッシュをオンまたはオフにします。絶対的 (暗黙的) フラッシュでは、各出力呼び出しの後にフラッシュ操作が行われるため、flush() への明示的な呼び出しは不要になります

4. OBキャッシュの役割!


OB キャッシュはさまざまな側面で使用されますが、私が知っているのは主に 2 つの側面です。

a. Web サイトが静的になる場合は、OB キャッシュを選択するのが良い選択です。

b. エラーを解決します。 警告: ヘッダー情報は変更できません - ヘッダーはすでに送信されています。
エラーの理由は、応答ヘッダーと対応する本文の位置がずれていることです。通常の状況では、サーバーからブラウザに返される対応するコンテンツは、応答ヘッダー + 応答本文となるはずです。

ただし、OB キャッシュを有効にすると、対応するヘッダー情報 (通常は header() 関数によって設定された情報) がプログラム キャッシュに配置されます。
echo print_r var_dump などの他の出力コンテンツは、最初に OB キャッシュに入れられます。
プログラムが終了するか、OB キャッシュが閉じられると、OB キャッシュの内容がプログラム キャッシュに書き込まれます。これにより、応答ヘッダー情報が常に応答本文の内容よりも前に配置されるようになります。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1031492.html技術記事 PHP 1 の Output_buffering と phpoutputbuffering についての簡単な説明。PHP のキャッシュとは何かについて話しましょう。 PHP では、キャッシュをクライアント キャッシュ (参照...
) に大別できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。