1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP 缓存机制

作者:用户 来源:互联网 时间:2017-12-01 13:33:04

php缓存机制

PHP 缓存机制 - 摘要: 本文讲的是PHP 缓存机制, 在写PHP程序的时候经常遇到这个问题; 包括使用header()函数,使用session()函数、cookies函数都有可能出次问题 PHP程序报如下错误:   Cannot modify header information - he


在写PHP程序的时候经常遇到这个问题;


包括使用header()函数,使用session()函数、cookies函数都有可能出次问题


PHP程序报如下错误:


 




Cannot modify header information - headers already sent by (output started at

 


不能够修改header infomation ,要解决这个错误需要明白两点问题。


 


第一,http协议



在http协议中,服务器向浏览器端输出html文件,html文件由两部分组成,一部分是我们页面本身的数据,还有一部分就是html页面的头信息,这些信息包含很多数据,如页面以何种编码格式显示、html数据大小、是否跳转、是否缓存等等。这些html头文件信息一经生成是不允许修改的。这就是上面报错的原因,Cannot modify header information,


 


第二,PHP的缓存机制



在php程序运行过程中,它有两部分缓存,一是程序缓存,我理解为程序在内存中的数据缓存;二是PHP提供的缓存模块,通过这个模块,PHP会另外在开辟一块地方作为数据的缓存,如果PHP模块缓存开启,则当程序中有echo数据的时候,数据被放入缓存中,而不是直接生成HTML文件,直到PHP程序运行完毕,再把模块缓存的数据一并生成HTML代码,包含头文件。下面举两个例子:


 


1.缓存未开启(默认是这样的)


<?php


echo"123";


header("Content-type:text/html;charset=utf-8")


echo"456";


?>


这时候曝出Cannot modify header information 错误;


 


2. 开启缓存机制




<?php


ob_start() ; //开启页面缓存


echo"123";


header("Content-type:text/html;charset=utf-8")


echo"456";


?>


 


在上述两个例子中,未开启缓存状态,当echo"123"; 的时候已经生成一份HTML代码, 到第三行的时候header函数就不能修改头文件信息,报错; 在例子2中ob_start() ; 开启缓存,(ob是output_buffer),当echo"123"时候数据写入到缓存模块中, 然后header()函数运行,此时并未生成HTML页面,然后echo"456";也是输出到缓存模块,当程序执行完毕后,缓存模块的数据再生成完整的HTML页面,这样就不报错了。


 


第二,PHP的缓存机制函数以及开启方式


 



如上所述,ob_start() 函数可以开启缓存模块,但此函数只是开启本页面的,如果必要的话,可以修改php.ini文件,找到output_buffering 选项,修改为output_buffering = 4096  (On也行),数字代表缓存大小。



PHP缓存机制还有一些函数,大家可是试试,能更好的理解PHP缓存机制


 


ob_start() 开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里. ob_get_contents() 这个函数返回内部缓冲的内容. 这就等于把这些输出都变成了字符串. ob_get_ length() 返回内部缓冲的长度. ob_end_flush() 结束输出缓冲, 并输出缓冲里的内容. 在这以后的输出都是正常输出. ob_end_clean() 结束输出缓冲, 并扔掉缓冲里的内容.

以上是PHP 缓存机制的全部内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有其他相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 缓存 机制 ,以便于您获取更多的相关知识。