Test the ob cache and program cache below:
In order to make the test effect more obvious before testing, we first turn off the ob cache and set an obvious error level in php.ini.
Output_buffering=off
Display_errors=on
Code 1:
The code is as follows:
echo "php"; header("content-type:text/html;charset='utf-8'"); echo 'ok';
will appear
php
Warning: Cannot modify header information - headers already sent by (output started at D:wwwapachehtdocstestt2.php:2) in D:wwwapachehtdocstestt2.php on line 3
ok
Code 2:
The code is as follows:
ob_start(); echo "php"; header("content-type:text/html;charset='utf-8'"); echo 'ok';
The result is completely correct
Cause analysis:
Code 1: Php has already sent a header information to the browser when echo 'php',
when it appears again
header("content-type: text/html;charset='utf-8'");
I saw another header information. At this time, the above header information had been typed back. I couldn't change it and an error occurred.
Code 2: The ob cache is turned on. When echoing 'php', the data to be sent to the browser is first placed in the ob cache. Then, when a header information is encountered, it is also placed in the Ob cache. , when the page ends, press the http protocol to cache the program and return it to the browser.
For a deeper understanding, look at the following code
Code 3:
The code is as follows:
ob_start(); echo "php"; header("content-type:text/html;charset='utf-8'"); echo 'ok'; echo ' '; $ob=ob_get_contents(); echo $ob;
Yes Output
Ob_get_contents() just gets the contents of the ob cache without knowing them
Ob_get_contents( ) must be used before the ob cache is cleared.
Code 4:
The code is as follows:
ob_start(); echo "php"; ob_clean();//清除缓存内容但不关闭缓存区,还能用(往里添加东西) header("content-type:text/html;charset='utf-8'"); echo 'ok'; echo ' '; $ob=ob_get_contents(); echo $ob;
Result:
Code 5:
The code is as follows:
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;
Result:
Code 6:
The code is as follows:
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;
Code 7: Compare code 6 with ob_flush()
The code is as follows:
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;
Result:
Ob_clean()
Clear the ob cache content but do not close it
Ob_get_flush()
Flush the cache to the program cache, Turn off ob cache
Code 8:
The code is as follows:
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( ) and program cache
Code 9:
The code is as follows:
ob_start(); echo 'a'; flush();//把Ob缓存冲刷到程序缓存再冲刷到浏览器输出,不影响ob缓存 echo ob_get_contents(); //aa
Code 10:
The code is as follows:
ob_start(); echo 'a'; ob_flush();//把Ob缓存冲刷到程序缓存,ob里没有了缓存内容 echo "ob_con".ob_get_contents(); //a 是按正常输出的,Ob里没内容
Program cache:
Code 11:
The code is as follows:
echo str_repeat(" ",1024);//一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面, 所以必须发送一些额外的空格来让这些浏览器显示页面内容。 for($i=0;$i<5;$i++){ echo $i; echo " "; sleep(1); flush(); }
It will output one number per second
If there is no flush(); it will temporarily store all the output in the program cache, and then return it to the browser as a whole after it is completed. This example illustrates the program cache.
The above is the in-depth analysis of Php output buffering cache and program cache_PHP tutorial. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!