您的位置:首页 > 其它

对ob缓存的理解

2014-07-16 00:06 134 查看
ob缓存的原理:
一般来讲,php程序中有两个缓存,一个是程序缓存,另一个是浏览器缓存,这两个是默认存在的。当我们打开ob缓存的时候,就出现了三个缓存了。那当我们打开ob缓存的时候,他们是怎么工作的呢???
当我们开启ob缓存的时候,程序会把echo输出的内容解析好后放进ob缓存中,当代码执行完毕后,再把ob缓存中的内容刷新到程序缓存中,最后再把程序缓存的内容发送给浏览器缓存,这时候才显示给用户。

<?php
ob_start();
echo "abc"."<br/>";
header("content-type:text/html;charset=utf-8");
echo "hello.<br/>";
ob_flush();
echo "aa<br/>";
echo "mingyang<br/>";

echo ob_get_contents();
echo "<hr/>";

//******************************************************************
/*ob_start();
echo "abc<br/>";
header("content-type:text/html;charset=utf-8");
echo "hello<br/>";
ob_end_flush();
echo "aa<br/>";
echo ob_get_contents();*/
?>
对于以上代码:目的是为了加深对ob缓存的理解。

第一段代码:第一步是开启ob缓存,然后会把‘abc’ ‘hello’ 写进ob缓存中,然后执行ob_flush()函数,就会把‘abc’ ‘hello’从ob缓存中刷新到程序缓存中,然后它接着往下执行,继续把‘aa’
'mingyang'又写进了ob缓存中,当代码执行完后,ob缓存中就只有'aa' 'mingyang',所以最后程序缓存把他自己的发送给浏览器的时候,输入的结果是
abc
hello.
aa
mingyang
aa
mingyang

第二段注释的代码:第一步也是开启ob缓存,然后把echo输出的值写进了ob缓存中,头信息写进了程序缓存中,因为执行到ob_end_flush()的时候,把‘abc’ 'hello'刷新到程序缓存中,并且关闭了ob缓存,所以执行到echo “aa<br/>”的时候,它没有再一次把数据写进ob缓存中了,而是直接写进了程序缓存中。最后执行echo ob_get_contents();的时候,ob缓存中没有任何数据,所以最后的输出的结果是:
abc
hello
aa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  缓存 ob