出力バッファの基本的な概念、原理解析のPHPの基礎

まず、概念

PHPを実行する過程で、出力が一時的にバッファに格納されたPHPの機能や動作の結果であろう生成することができ、唯一のバッファが一杯になったとき、またはデータに出力される前に、PHPは、実行が終了し、又は出力必要ブラウザは、この領域は、PHPバッファされたデータ出力バッファ(OB)と呼ばれます。

第二に、原則

①PHPを実行するときにエコーが、出力コードデータ等ますprint_rは、(実際には、機能の多くは、出力を生成する)を満たした場合に使用されるバッファの後、データはバッファにPHP PHP自体が出力されます領域は、出力されます。

②出力されるバッファの内容を示す、命令バッファPHP自体を受信すると、データがサーバにバッファに出力され、サーバは、PHPから出力されたデータを受信し、サーバ自体にデータを提示しますバッファに出力するまで、

サーバが唯一の出力バッファの内容に、命令③を受信すると、バッファ出力の内容がブラウザに返します。

上記から分かるように、出力バッファ層は、出力バッファ層の一意ではない、それだけで、実際に多くの層の一つです。あなたが別のSAPIの使用に関連するSAPI(WebまたはCLI)を念頭に置いて、出力バッファ層の振る舞いを維持する必要があり、最後のものは、異なる動作を有することができます。

概念を前記第一の点は、バッファは、データ出力バッファと、主に可変制御にoutput_buffering php.iniを介してバッファに関連し、このSAPIを充填されます。デフォルトにoutput_bufferingがオンになっている、デフォルト値は4096(4キロバイト)です。

出力バッファの第三に、コンフィギュレーション

PHP-FPM SAPIに1我々は通常、ここではPHP iniファイルの設定をまとめるために、一例として、これを使用する3つの主要なオプション:

output_buffering
implicit_flush
output_handler

テーブルを整理するためにどのようなこれらの三つのパラメータの意味:

上記の3つの値は、実行時にini_set()で、これらのオプションの値を変更するために使用することができないことに注意してください。

図2は、構成上のPHP CLIモードを実行するとき、およびFPMは、注意すべきいくつかのポイントがある、同じではありません。

(1)にoutput_bufferingパラメータはデフォルトでオンになっていません、

(2)implicit_flushデフォルトパラメータが1(オン)に設定されています。

3、出力ハンドラにいくつかの一般的に使用される設定を参照することができ、コールバック関数を設定します。

①ob_gzhandler:使用EXT / zlibの圧縮された出力。

②mb_output_handler:使用EXT /文字エンコーディングを変換するのmbstring。

③ob_iconv_handler:使用EXT /のiconv文字エンコーディング変換。

④ob_tidyhandler:使用出力をソートする内線/整頓HTMLテキスト。

⑤ob_[/デフレートを膨らま] _handler:使用EXT / HTTP圧縮出力。

⑥ob_etaghandler:使用EXT / HTTPが自動的にHTTPのEtagを生成します。

第四に、出力バッファに関連する方法

ob_start(); //出力バッファを開いて、出力情報の全ては、もはや直接、次のレベルに送信されていないが、内部出力バッファに格納されています。
ob_clean(); //内部バッファの内容を削除し、バッファが(出力しない)閉じません。
ob_end_clean(); //内部バッファの内容を削除し、バッファが(NO出力)が閉鎖されています。
ob_get_clean(); //内部バッファの内容を返し、バッファを閉じます。
ob_flush(); //次のレベルにバッファの内容を送信バッファの内容を削除し、バッファが閉じられていません。
ob_end_flush(); //バッファの内容を削除し、次の層へのバッファの内容を送信し、バッファを閉じます。
ob_get_flush(); //は、バッファの内容が、バッファ及びクローズは、バッファの内容物を放出返します。
ob_get_contents(); //バッファの内容が出力されない返します。
ob_get_length(); //バッファの長さを返し、バッファが活性化されていない場合、FALSEが戻されます。
ob_get_status(); //全ての出力バッファの状態を取得します。
ob_implicit_flush(); //開く/閉じる絶対ブラシを送信します。

V.アプリケーション出力バッファ

1、セッション、クッキー、ヘッダの設定このような機能がオンになる前に:

最も一般的な使い方は、ヘッダ関数の前にある、それは出力いくつかのデータを持っている、これは、このようなヘッダー情報を変更することはできませんようにいくつかのエラー、になります - すでにによって送られたヘッダ;

ヘッダは、出力データの一部される前に、このエラーは、ために発生したデータが出力されている間、サーバは、(出力ので、すなわち要求が有効である)ブラウザにステータス応答を送信する、及びその後、あなたは何度もヘッダー機能を使用します

HTTPヘッダを送信し、このエラーが返され、エラーが意味:HTTPすでに送り出されたヘッダは、あなたが彼に修正を行うことはできません。

だから、まず始めにメソッドをのob_start開くことができます。

2、コントロールのダウンロードPHPプログラム:

多くの人々は通常、PHPファイルのダウンロードで実装しますが、ファイルサイズが(例えば、100M)大きすぎる場合、メモリフットプリントがしますが、メモリへの最初の読み取りは、ユーザーに送信さならば、はるかに長い応答時間(でもタイムアウト)につながることができます大幅に増加(またはオーバーフロー)。

出力バッファを使用して、読み出しファイルをバッファに読み込むことができ、ユーザに特定のサイズに到達すると、次いでフラグメント化の効果を達成するために、読み続けます。だから、ブラウザは、すべてのファイルが読み取られるまで待つことなく、データを受信し続けることができますが、それはあまりにも多くのメモリを占有されることはありません。

3、静的ファイルキャッシュとして:

繰り返し読み取る必要があり、それぞれは、PHPなしで処理されに直接返すように読んだ後最初の、静的文書を生成し、バッファに読み込まれ、低周波ファイルを変更しようとする(読み出します)データベースなどを取ります。

 

また、記事に興味がある可能性があります。

記事の同時リリース:  https://www.geek-share.com/detail/2771912063.html

おすすめ

転載: www.cnblogs.com/xxcn/p/11056490.html