一,PHP缓存机制详解php
咱们可使用PHP自带的缓存机制来完成页面静态化,可是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,每每须要和其余静态化技术(一般是伪静态技术)结合使用。html
output buffer是php自带缓存,能够经过配置php.ini关闭,程序缓存是一直开启状态,无法关闭。程序缓存中内容无法修改,output buffer中内容能够修改,修改完成后所有发给程序缓存。apache
当咱们设计一个通讯协议时,“消息头/消息体”的分割方式是很经常使用的,消息头告诉对方这个消息是干什么的,消息体告诉对方 怎么干。HTTP传输的消息也是这样规定的,每个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必须的。一个网页对应一个消息,发送消息时候,通常来讲,都是先消息头部分,在消息头部分指明了 消息体部分的长度,而后使用\r\n\r\n来表示消息头部分结束,接下来是消息体部分。若是没有定义消息头,发送默认的消息头。浏览器
由图可知,浏览器向apache发送http请求后,apache根据httpd.conf文件,将请求转发给php处理模块,php处理模块根据php.ini处理test2.php,若是php.ini关闭output buffer,那么php处理模块将信息头部和信息内容直接发送给程序缓存,若是php.ini开启output buffer,那么php处理模块将信息头部和信息内容直接发送给Output buffer,Output buffer接收完后再发送给程序缓存。缓存
经过如下实例学习消息与php缓存,配置php.ini。学习
(1)php.ini,output_buffering=off,关闭php缓存;设计
(2)display_errors = on,显示错误;日志
(3)error_reporting=E_ALL & ~E_NOTICE,表示全部非NOTICE级别的错误日志都打印出来;htm
以后执行如下代码。blog
<?php echo “aaa”; header(“content-type:text/html;charset=utf-8”); echo “hello”; ?>
这段程序报警告。PHP处理模块一边处理程序,一边将处理结果发送到程序缓存,处理第1行,将默认消息头以及aaa做为消息体一部分发送到程序缓存,执行第2行,再次发送消息头,此时程序缓存中有消息头了,且无法修改,此时报警告。所以能够在程序中将output buffer开启,
<?php ob_start(); echo “aaa”; header(“content-type:text/html;charset=utf-8”); echo “hello”; ?>
执行第1行开启缓存,执行第2行,将默认消息头以及aaa做为消息体一部分发送给output buffer,执行第3行,修改消息头,执行第4行,将hello发送给output buffer,程序执行完后,output buffer将消息发送给程序缓存,程序缓存输出。
二,下面是一些php自带缓存指令:
ob_start() //开启缓存
ob_clean() //清空缓存
ob_end_clean() //清空缓存,关闭缓存
ob_flush() //刷新缓存(将缓存现有内容输出)
ob_end_flush() //刷新缓存,并关闭缓存
$contents = ob_get_contents() //得到缓存内容
file_put_contents("d:/log.txt",$contents) //将缓存内容打印到文本
三,flush与ob_flush区别
flush()是输出程序缓存指令;
ob_flush()是输出自带缓存指令;