以下の 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() を使用する必要があります
コード 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
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...