PHP 出力バッファリング キャッシュとプログラム キャッシュの詳細な分析_PHP チュートリアル

PHP中文网
リリース: 2016-07-21 15:00:42
オリジナル
1134 人が閲覧しました

以下の ob キャッシュとプログラム キャッシュをテストします。
テスト前にテストの効果をより明確にするために、まず ob キャッシュをオフにし、php.ini で明らかなエラー レベルを設定します。
Output_buffering=off
Display_errors=on
コード 1:

コードは次のとおりです:

echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
ログイン後にコピー


Then
php
警告: ヘッダー情報は変更できません - ヘッダーはすでに送信されています (出力は D:wwwapachehtdocstestt2 で開始されました) .php:2) in D:wwwapachehtdocstestt2.php on line 3
ok
コード 2:

コードは次のとおりです:

ob_start();
 echo "php";
 header("content-type:text/html;charset='utf-8'");
 echo 'ok';
ログイン後にコピー


結果は完全に正しいです

原因分析:
コード1:
Php 'php'をエコーすると、

header("content-type:text/html;charset='utf-8'");
とヘッダ情報がブラウザに送信されています。別のヘッダー情報が表示されます。この時点では、上記のヘッダー情報が入力されており、変更できない場合はエラーが発生します。

コード 2: ob キャッシュがオンになります。「php」をエコーすると、ブラウザーに送信されるデータがまず ob キャッシュに配置され、ヘッダー情報が検出されると、それも ob に配置されます。ページが終了したら、 を押します。 http プロトコルはプログラムによってキャッシュされた後、ブラウザに返されます。 より深く理解するために次のコードを見てみましょう

コード 3:

コードは次のとおりです:

ob_start();
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '
';
$ob=ob_get_contents();
echo $ob;
ログイン後にコピー


は出力します


Ob_get_contents()コンテンツを取得しますob キャッシュ内にあり、明確ではありません ob キャッシュがクリアされる前に

Ob_get_contents() を使用する必要があります

コード 4:

コードは次のとおりです:

ob_start(); 
echo "php"; 
ob_clean();//清除缓存内容但不关闭缓存区,还能用(往里添加东西) 
header("content-type:text/html;charset='utf-8'"); 
echo 'ok'; 
echo '
'; 
$ob=ob_get_contents(); 
echo $ob;
ログイン後にコピー


結果:

コード 5:

コードは次のとおりです:

ob_start();
echo "php";
ob_end_clean();//清空缓存内容并关闭缓存区,ob_get_contents取不到内容
header("content-type:text/html;charset='utf-8'");
echo 'ok';echo '
';
$ob=ob_get_contents();
echo $ob;
ログイン後にコピー


結果:


コード 6:

コードは次のとおりです:

ob_start();
echo "php";
ob_end_flush();//把缓存送到程序缓存内并关闭ob缓存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '
';
$ob=ob_get_contents();
echo $ob;
ログイン後にコピー

7: 比較コード6 ob_flush() と比較します

コードは次のとおりです:

ob_start();
echo "php";
ob_flush();//把Ob 缓存送到程序缓存,不关闭ob缓存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '
';
$ob=ob_get_contents();
echo $ob;
ログイン後にコピー



結果:


Ob_clean()
ob キャッシュの内容をクリアしますが、閉じません
Ob_get_flush()
フラッシュキャッシュをプログラム キャッシュにコピーし、ob キャッシュを閉じます

コード 8:

コードは次のとおりです:

Ob_start();
echo 'abc';
header("content-type:text/html;charset='utf-8'");
echo 'hello';
Ob_flush();
echo 'aa';
echo ob_get_contents();
//abchelloaaaa
ログイン後にコピー


2.ob_flush()、flush() およびプログラム キャッシュ
コード 9:

コードは次のとおりです:

ob_start();
echo 'a';
flush();//把Ob缓存冲刷到程序缓存再冲刷到浏览器输出,不影响ob缓存
echo ob_get_contents();
//aa
ログイン後にコピー

コード 10:


コードは次のとおりです:

ob_start();
echo 'a';
ob_flush();//把Ob缓存冲刷到程序缓存,ob里没有了缓存内容
echo "ob_con".ob_get_contents();
//a     是按正常输出的,Ob里没内容
ログイン後にコピー
プログラム キャッシュ:


コード 11:

コードは次のとおりです:


rrりえ

1 秒あたりの数値を出力します
flash(); がない場合、すべての出力はプログラム キャッシュに一時的に保存され、その後全体としてブラウザーに返されます。 //www.bkjia.com/PHPjc/328041.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/328041.html以下の技術記事では、ob キャッシュとプログラム キャッシュをテストしています: テスト中 テストの効果をより明確にするためにでは、まず php.ini で ob キャッシュをオフにし、明らかなエラー レベルを設定します。 Output_buffering=off Display_er...

上記は、PHP 出力バッファリング キャッシュとプログラム キャッシュの詳細な分析_PHP チュートリアルの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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