当前位置:Gxlcms > PHP教程 > Phpoutputbuffering缓存及程序缓存_PHP教程

Phpoutputbuffering缓存及程序缓存_PHP教程

时间:2021-07-01 10:21:17 帮助过:4人阅读

输出显示顺序,提供了

输出的就先存在输出。

下面测试

在测试前为了测试效果更明显,我们在

Output_buffering=off

Display_errors=on

代码

  1. <strong><span 1<="" span=""> <span echo<="" span=""> "php"<span ;="" <="" span=""><span 2<="" span=""> <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span 3<="" span=""> <span echo<="" span=""> 'ok';</span></span></span></span></span></span></span></span></strong>

则会出现

php
Warning: Cannot modify header information - headers already sent by (output started at D:\www\apache\htdocs\test\t2.php:2) in D:\www\apache\htdocs\test\t2.php on line 3
ok

代码2:

  1. <strong><span 1<="" span=""> <span ob_start<="" span=""><span ();="" <="" span=""><span 2<="" span=""> <span echo<="" span=""> "php"<span ;="" <="" span=""><span 3<="" span=""> <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span 4<="" span=""> <span echo<="" span=""> 'ok';</span></span></span></span></span></span></span></span></span></span></span></strong>

结果就完全正确了

原因分析:

代码Phpecho ‘php’时已经向浏览器发送一个头信息,

当再出现

header("content-type:text/html;charset='utf-8'");

又看到一个头信息,这时已经打回了上面的头信息,无法更该便出错了。

代码‘php’时把要打给浏览器的数据先放到

为加深理解再看以下代码

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> "php"<span ;="" <="" span=""><span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span echo<="" span=""> 'ok'<span ;="" <="" span=""><span echo<="" span=""> '<hr>'<span ;="" <="" span=""><span $ob<="" span="">=<span ob_get_contents<="" span=""><span ();="" <="" span=""><span echo<="" span=""> <span $ob<="" span="">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

会输出

Ob_get_contents()

Ob_get_contents()

代码

  1. <strong><span 1<="" span=""> <span ob_start<="" span=""><span ();="" <="" span=""><span 2<="" span=""> <span echo<="" span=""> "php"<span ;="" <="" span=""><span 3<="" span=""> <span ob_clean<="" span="">();<span <="" span=""><span 清除缓存内容但不关闭缓存区,还能用(往里添加东西)<="" span="">
  2. <span 4<="" span=""> <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span 5<="" span=""> <span echo<="" span=""> 'ok'<span ;="" <="" span=""><span 6<="" span=""> <span echo<="" span=""> '<hr>'<span ;="" <="" span=""><span 7<="" span=""> <span $ob<="" span="">=<span ob_get_contents<="" span=""><span ();="" <="" span=""><span 8<="" span=""> <span echo<="" span=""> <span $ob<="" span="">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

结果:

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> "php"<span ;="" <="" span=""><span ob_end_clean<="" span="">();<span <="" span=""><span 清空缓存内容并关闭缓存区,ob_get_contents取不到内容<="" span="">
  2. <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span echo<="" span=""> 'ok'<span ;="" <="" span=""><span echo<="" span=""> '<hr>'<span ;="" <="" span=""><span $ob<="" span="">=<span ob_get_contents<="" span=""><span ();="" <="" span=""><span echo<="" span=""> <span $ob<="" span="">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

结果:

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> "php"<span ;="" <="" span=""><span ob_end_flush<="" span="">();<span <="" span=""><span 把缓存送到程序缓存内并关闭ob缓存<="" span="">
  2. <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span echo<="" span=""> 'ok'<span ;="" <="" span=""><span echo<="" span=""> '<hr>'<span ;="" <="" span=""><span $ob<="" span="">=<span ob_get_contents<="" span=""><span ();="" <="" span=""><span echo<="" span=""> <span $ob<="" span="">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> "php"<span ;="" <="" span=""><span ob_flush<="" span="">();<span <="" span=""><span 把ob="" 缓存送到程序缓存,不关闭ob缓存<="" span="">
  2. <span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span echo<="" span=""> 'ok'<span ;="" <="" span=""><span echo<="" span=""> '<hr>'<span ;="" <="" span=""><span $ob<="" span="">=<span ob_get_contents<="" span=""><span ();="" <="" span=""><span echo<="" span=""> <span $ob<="" span="">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

结果:

Ob_clean()

清空

Ob_get_flush()

冲刷出缓存到程序缓存,关闭

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> 'abc'<span ;="" <="" span=""><span header<="" span="">("content-type:text/html;charset='utf-8'"<span );="" <="" span=""><span echo<="" span=""> 'hello'<span ;="" <="" span=""><span ob_flush<="" span=""><span ();="" <="" span=""><span echo<="" span=""> 'aa'<span ;="" <="" span=""><span echo<="" span=""> <span ob_get_contents<="" span=""><span ();="" <="" span=""><span <="" span=""><span abchelloaaaa<="" span=""></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

2.ob_flush(),flush()

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> 'a'<span ;="" <="" span=""><span flush<="" span="">();<span <="" span=""><span 把ob缓存冲刷到程序缓存再冲刷到浏览器<="" pre="">输出,不影响ob缓存</span>
  2. <span echo<="" span=""> <span ob_get_contents<="" span=""><span ();="" <="" span=""><span <="" span=""><span aa<="" span=""></span></span></span></span></span></span></span></span></span></span></span></strong>

代码

  1. <strong><span ob_start<="" span=""><span ();="" <="" span=""><span echo<="" span=""> 'a'<span ;="" <="" span=""><span ob_flush<="" span="">();<span <="" span=""><span 把ob缓存冲刷到程序缓存,ob里没有了缓存内容<="" span="">
  2. <span echo<="" span=""> "<br>ob_con".<span ob_get_contents<="" span=""><span ();="" <="" span=""><span <="" span=""><span a="" 是按正常<="" pre="">输出的,Ob里没内容</span></span></span></span></span></span></span></span></span></span></span></span></strong>

代码

  1. <strong><span echo<="" span=""> <span str_repeat<="" span="">(" ",1024);<span <="" span=""><span 一些版本的="" microsoft="" internet="" explorer="" 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。="" <="" span="">
  2. <span for<="" span="">(<span $i<="" span="">=0;<span $i<="" span=""><5;<span $i<="" span="">++<span ){="" <="" span=""><span echo<="" span=""> <span $i<="" span=""><span ;="" <="" span=""><span echo<="" span=""> "<br>"<span ;="" <="" span=""><span sleep<="" span="">(1<span );="" <="" span=""><span flush<="" span=""><span ();="" }<="" span=""></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong>

会一秒输出一个数字

如果没有输出先暂存在程序缓存里,等完毕在整体返回给浏览器 这个例子说明了程序缓存

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/440408.htmlTechArticle在 若 下面测试 在测试前为了测试效果更明显,我们在 Output_buffering=off Display_errors=on 代码 "php" ("content-type:text/html;charset='utf-8'" 'ok'; 则会出...

人气教程排行