PHP缓存机制详解
来源:互联网 发布:java多线程上传文件 编辑:程序博客网 时间:2024/05/16 19:45
一,PHP缓存机制详解
我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用。
output buffer是php自带缓存,可以通过配置php.ini关闭,程序缓存是一直开启状态,没法关闭。程序缓存中内容没法修改,output buffer中内容可以修改,修改完成后全部发给程序缓存。
当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方 怎么干。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级别的错误日志都打印出来;
之后执行以下代码。
<?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()是输出自带缓存指令;
转载原文于:https://www.cnblogs.com/usa007lhy/p/5421545.html
- PHP缓存机制详解
- php与浏览器的缓存机制详解
- php缓存机制
- PHP缓存机制
- php缓存机制
- php缓存机制
- php缓存机制
- PHP 输出缓存机制
- PHP缓存机制
- PHP的缓存机制
- Hibernate缓存机制详解
- 浏览器缓存机制详解
- 详解Hibernate缓存机制
- Hibernate缓存机制详解
- hibernate缓存机制详解
- 浏览器缓存机制详解
- IOS缓存机制详解
- 浏览器缓存机制详解
- Netty5.0(上)
- Python处理xlsx文件
- Linux 访问 Windows 代理服务器配置
- 菜鸟Linux攻略--目录文件权限的查看和修改(详细)
- Mac 设置环境变量 PATH 的几种方法
- PHP缓存机制详解
- PGP加密文件和解密文件
- 未来十年物联网的发展趋势
- 关于python导入模块和package的一些深度思考
- visual studio 的dll目录设置
- Android用java代码实现部分文字变色
- 1018. 锤子剪刀布 (20)
- 回车键触发input渲染到ul的li中
- Oracle 12.2 新特性 | PDB不同字符集变更深入解析