二,PHP缓存机制详解

一,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()是输出自带缓存指令;

相关文章
相关标签/搜索