ホームページ > バックエンド開発 > PHPチュートリアル > phpのoutput_bufferingキャッシュの使用方法の概要

phpのoutput_bufferingキャッシュの使用方法の概要

WBOY
リリース: 2016-07-25 08:55:20
オリジナル
1338 人が閲覧しました
  1. for($i=0; $i<10; $i++){
  2. echo $i.'
    '
  3. sleep(2)}
  4. ?>
コードをコピーします
実行結果: データがバッファーのサイズに達していないため、すべてのスクリプトが完了するまで出力は出力されません。

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

    for($i=0; $i<10; $i++){
  1. echo $i.str_repeat(" ",500).'
    ' / / 256 (またはそれ以上) バイトを受信するまでページは表示されないため、これらのブラウザーがページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。
  2. flash();
  3. sleep(1);
  4. コードをコピー
PHP バッファリングが無効になっているため、出力する前にスクリプトの実行を待つ必要がなく、データは PHP バッファーに残らず、断続的な出力が表示されます。 エコー -> TCPバッファ -> ブラウザ
例 3、output_buffering=4096 の場合、ob_start() を使用せずに、より大きなデータ (1 つのバッファーを超える) を出力します。

for($i=0; $i<10; $i++){
echo file_get_contents('f.txt').$i.'
'; (1);
    }
  1. ?> コードをコピーします
  2. 結果を実行します。 f.txt は 4kb を超えるファイルです。デフォルトのバッファ値より大きく、バッファ容量が足りないため、バッファがいっぱいになるたびに出力され、断続的に出力されます。
  3. 例 4、output_buffering=4096 の場合、より大きなデータ (1 つのバッファーより大きい) を出力するには、ob_start() を使用します。
ob_start();

for($i=0; $i<10; $i++){

echo file_get_contents('f.txt').$i.' sleep(1);

?> コードをコピーします
    ob_start()を使用しているためバッファに十分な容量が設定されており、スクリプト実行まで保存され出力されます。
  1. output_buffering メソッド 1.ob_start Output_buffering メカニズムを有効にします。有効にすると、スクリプトはブラウザに直接出力されなくなり、一時的に PHP バッファリング領域に書き込まれます。スクリプトの実行が完了するまで送信されません。
  2. 2.ob_get_contents php バッファリングでデータを取得します。 注: ob_end_clean() の前に呼び出す必要があります。そうしないと、null 文字のみが取得されます。
  3. 3.ob_end_flush と ob_end_clean ob_end_flush は php バッファリングにデータを出力しますが、クリアしません。 ob_end_clean は出力せず、php バッファリング内のデータをクリアするだけです。
  4. 注: マニュアルの ob_flush/flush の説明はすべて出力バッファをリフレッシュするため、一緒に使用する必要があります。 実際、これら 2 つは異なるオブジェクトに対して動作する場合があります。場合によっては、flush は何も実行しません。
ob_* 系関数は、PHP 自体の出力バッファを操作します。 したがって、ob_flush は PHP 自体のバッファをフラッシュします。
そして厳密に言えば、これは PHP が Apache モジュール (ハンドラーまたはフィルター) としてインストールされている場合にのみ実際に効果があります。 これは、WebServer (特に Apache と考えることができます) を更新するバッファです。 Apache モジュールの sapi の下で、flush は、sapi_module のフラッシュ メンバー関数ポインターを呼び出すことによって、間接的に Apache の API を呼び出します。ap_rflush は、Apache の出力バッファーをリフレッシュします。
mod_gzip などの一部の Apache モジュールは、独自の出力をキャッシュする場合があり、これにより、flush() 関数によって生成された結果がクライアントのブラウザーにすぐに送信されなくなります。 ブラウザでも、受信したコンテンツを表示する前にキャッシュします。

たとえば、Netscape ブラウザは改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、

タグを受け取るまでテーブル全体を表示しません。 Microsoft Internet Explorer の一部のバージョンでは、256 バイトを受信した後にのみページの表示が開始されるため、これらのブラウザでページのコンテンツを表示するには、追加のスペースを送信する必要があります。

正しい使用順序は次のとおりです: 最初に ob_flush、次にフラッシュです。 もちろん、他の sapi では、flush を呼び出さなくても問題ありませんが、コードの移植性を確保するために、フラッシュと組み合わせて使用​​することを推奨します。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート