PHP における出力バッファリングの原理と応用

藏色散人
リリース: 2023-04-07 17:36:01
転載
2008 人が閲覧しました

php キャッシュ プロセス

PHP をリクエストするプロセスでは、実際には 3 つのキャッシュがあります:

1. プログラム キャッシュ

2。 ob キャッシュ

3. ブラウザ キャッシュ.

ob を開くための 2 つの方法

##1. php.ini で設定; Output_buffering = 4096 ; ここに署名してください

2 php ページで ob_start() を使用します;

php.ini を通じて開いた場合、すべての php ページに適用されます。 ob_start() で開くとページにのみ影響します

ob キャッシュの知識ポイント

サービスでは、ob キャッシュを有効にすると、最初にエコー データが配置されます Enter ob

PHP ページが最後まで実行されると、ob キャッシュされたデータ (存在する場合) がプログラム キャッシュに強制的に更新され、データは Apache を通じて http 応答パッケージにカプセル化されて返されます。ブラウザ

ob がない場合、すべてのデータはプログラム キャッシュに直接置かれます。 ob を有効にするかどうかに関係なく、ヘッダー情報は常にプログラム キャッシュに入れられます。

ob 関連関数

ob_start($callback)

//在当前页面中开启ob,注意callback
ob_start($callback);
ログイン後にコピー

ob_get_contents()

//获取当前ob缓存中的内容
ob_get_contents()
ログイン後にコピー

ob_get_clean()

//获取当前ob缓存中的内容,并且清空当前的ob缓存
ob_get_clean()
ログイン後にコピー

ob_flush()

//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存
ob_flush()
ログイン後にコピー

ob_end_flush()

//关闭ob缓存,并将数据刷回到程序缓存中
ob_end_flush()
ログイン後にコピー

ob_clean()

//将ob缓存中的内容清空
ob_clean()
ログイン後にコピー

ob_end_clean()

//将ob缓存中的数据清空,并且关闭ob缓存
ob_end_clean()
ログイン後にコピー

注 ob_start($callback) コールバック

<?php
ob_start("callback_func");
function callback_func($str){
    return "callback".$str;
}
echo "123";//输出:callback123
ログイン後にコピー

アプリケーション シナリオ

header() が送信される前のエラー レポート

エラー コード

<?php
echo "before_header";
header("Content-type:text/html;charset=utf-8");
echo "after_header";
ログイン後にコピー

出力:

Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
ログイン後にコピー

Solution

ヘッダーを送信する前に ob を有効にすると、すべてのエコー コンテンツが ob に送信され、エラーが解決されます。

<?php
ob_start();
echo "before_header\n";
header("Content-type:text/html;charset=utf-8");
echo "after_header\n";
ログイン後にコピー

出力

before_header
after_header
ログイン後にコピー

以上がPHP における出力バッファリングの原理と応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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