二,PHP缓存机制详解
一,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()是输出自带缓存指令;
二,PHP缓存机制详解的更多相关文章
- nginx平台初识(二) 浏览器 HTTP 协议缓存机制详解
1.缓存的分类 缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). 服务端缓存又分为 代理服务器缓存 和 反 ...
- PHP缓存机制详解
一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...
- 浏览器 HTTP 协议缓存机制详解
最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...
- hibernate缓存机制详解
hiberante面试题—hibernate缓存机制详解 这是面试中经常问到的一个问题,可以按照我的思路回答,准你回答得很完美.首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再 ...
- 浏览器 HTTP 协议缓存机制详解--网络缓存决策机制流程图
1.缓存的分类 2.浏览器缓存机制详解 2.1 HTML Meta标签控制缓存 2.2 HTTP头信息控制缓存 2.2.1 浏览器请求流程 2.2.2 几个重要概念解释 3.用户行为与缓存 4.Ref ...
- RecyclerView 缓存机制详解
一 前言 RecyclerView据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView.GridView.RecyclerView可以用来代替传 ...
- MySQL缓存机制详解(一)
本文章拿来学习用||参考资料:http://www.2cto.com/database/201308/236361.html 对MySql查询缓存及SQL Server过程缓存的理解及总结 一.M ...
- IOS缓存机制详解
资料均来自互联网,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 人魔七七:http://www.cnblogs.com/qiqibo/ 为什么要有缓存 应用需要 ...
- 【转】IOS缓存机制详解
人魔七七:http://www.cnblogs.com/qiqibo/ 为什么要有缓存 应用需要离线工作的主要原因就是改善应用所表现出的性能.将应用内容缓存起来就可以支持离线.我们可以用两种不同的缓存 ...
随机推荐
- 理解python中的元类
一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...
- cdoj31-饭卡(card) (01背包)
http://acm.uestc.edu.cn/#/problem/show/31 饭卡(card) Time Limit: 3000/1000MS (Java/Others) Memory ...
- ios广告封装
代码地址:https://github.com/CoderZhuXH/XHLaunchAd
- SpringBoot29 登录逻辑、登录状态判断
1 知识点扫盲 浏览器和服务器之间时通过session来确定连接状态的,浏览器第一次请求时服务端会自动生成一个session,并将这个sessionId传回给浏览器,浏览器将这个sessionId存放 ...
- socket,TCP/IP的理解(转)
TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...
- 关于在64位win7下运行Virtualbox安装系统时出错(提示VBoxDD.DLL错误)的解决方
安装没有问题,安装了最新版VirtualBox-4.3.18-96516-Win,一点运行想安装系统时就出错. 这是提示的错误: 运行Virtualbox去安装系统时出错:Failed to open ...
- nginx相关教程
1.nginx简易的教程 http://www.cnblogs.com/jingmoxukong/p/5945200.html#%E8%B7%A8%E5%9F%9F%E8%A7%A3%E5%86%B3 ...
- Boost::split用法详解
工程中使用boost库:(设定vs2010环境)在Library files加上 D:\boost\boost_1_46_0\bin\vc10\lib在Include files加上 D:\boost ...
- (自己转)比较ArrayList、LinkedList、Vector
1. List概述 List,就如图名字所示一样,是元素的有序列表.当我们讨论List时,将其与Set作对比是一个很好的办法,Set集合中的元素是无序且唯一的.下图是Collection的类继承图,从 ...
- centos 学习总结
我用的是6.4 添加中文输入法 .su root .yum install "@Chinese Support" .exit .回到桌面,system->preference ...