PHP缓存主要分为程序缓存和ob缓存;
1)程序缓存无法关闭(一直开启);
2)Output buffering可以通过php.ini文件进行配置(设置output_buffering=?,具体:Off: 表示关闭PHP输出缓存;On: 打开无限大的输出缓存;4096: 打开大小为4096Byte的输出缓存);
3)也可以通过 ob_start()手动激活php output_buffering机制,使得即便输出超过了1kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大,ob缓存ob缓存只有直到脚本结束或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。
程序缓存中内容没法修改,但Output buffering中内容可以修改,修改完成后全部发给程序缓存。下面举例说明:
1.默认情况下,未开启ob缓存,此时:PHP处理模块一边处理程序,一边将处理结果发送到程序缓存。在程序执行结束,会把程序缓存中的数据发送给浏览器。
<?php
echo "ssss";//默认消息头与"ssss" 发送到程序缓存
header("content-type:text/html;charset=utf-8");//报警告。原因:此前程序缓存中已有默认消息头,且无法修改,此时再次发送消息头,导致报警告
echo "zzzz";
?>
2.在程序中使用ob_start将output buffer开启,此时,所有的echo输出都会保存到ob缓存中,可以使用ob系列函数进行操作
<?php
ob_start();//开启ob缓存
echo "ssss";//默认消息头与"ssss" 发送到**output buffer**
header("content-type:text/html;charset=utf-8");//修改消息头
echo "zzzz";//"zzzz"发送到**output buffer**
?>
程序执行完后,output buffer将消息发送给程序缓存,程序缓存再发送给浏览器
PHP缓存相关函数:
ob_start() //开启缓存
ob_clean() //清空缓存
ob_end() //关闭ob缓存
ob_end_clean() 清空缓存并关闭ob缓存,不发送给客户端浏览器
ob_end_flush() //刷新缓存,并关闭缓存,但发送给客户端浏览器
ob_get_contents() //以字符串形式获得缓存内容
file_put_contents(“test.log”,$contents) //将缓存内容打印到文本
ob_flush() //刷新缓存(将ob缓存现有内容输出到程序缓存)
flush() 把程序缓存内容推送到浏览器
flush与ob_flush**区别**:
flush()是把程序缓存中的内容送到浏览器缓存中;
ob_flush()是把ob缓存中的内容放到程序缓存;
1.PHP输出缓存(output_buffering)小记http://www.cnblogs.com/zemliu/archive/2012/05/11/2495293.html
2.php中ob缓存机制 http://www.cnblogs.com/hanyouchun/p/4058994.html
3.影响 PHP 行为的扩展 http://www.php.net/manual/zh/outcontrol.configuration.php
4.PHP 中flush()与ob_flush()的区别http://blog.csdn.net/jasenmark/article/details/30249925