来源:未知 时间:2014-09-15 23:16 作者:xbdadmin 阅读:次
[导读] 缓存可以分三种 输出缓存,即output buffering.简称OB缓存. 程序缓存 浏览器缓存 输出缓存和程序缓存都是服务器端的缓存. 而浏览器缓存属于客户端缓存. 程序缓存: 前言: 假设OB缓存没开启...
缓存可以分三种
输出缓存和程序缓存都是服务器端的缓存. 而浏览器缓存属于客户端缓存. 程序缓存: 前言 : 假设OB缓存没开启,当PHP脚本运行时,其运行内容我们可以分成输出部分和程序部分. 输出部分: 如echo,print_r,var_dump的内容. 程序部分: 除了输出部分,其他的都是程序部分. 下面看这段代码 : <?php ob_start(); //打开ob缓存 echo 'hello word'; //输出部分 header('content-type:text/html; charset=utf-8'); //程序部分 echo 'hello word'; //输出部分 ?> 运行输出 :
分析: 两次 "hello word" 都输出了,但是中间有个warning级别的报错.大致意思是:warning: 不能修改头部信息 - 头部信息已经发出. 从HTTP协议的角度上讲,每次请求都是有固定格式组成.先是头部信息然后是主体内容(也就是输出的内容).回过头看上面的代码,先输出内容后,又设置了头部信息 结构上就错了,所以会报错.
讲了那么多,好像还没提到程序缓存? 答: 确实如此,在讲程序缓存前还需澄清一个误区.依然看那段代码:
<?php ob_start(); //打开ob缓存 echo 'hello word'; //输出部分 header('content-type:text/html; charset=utf-8'); //程序部分 echo 'hello word'; //输出部分 ?> 也许你会认为PHP脚本在运行后,每执行到一个输出语句时(如echo)浏览器会直接输出内容,事实并非如此,而是将PHP脚本运行的内容全部(也就是输出部分和程序部分)放入程序缓存.当PHP脚本运行结束后, 程序缓存将内容交给浏览器,最后由浏览器输出. 如图:
OB缓存(output buffering) OB缓存默认是没有打开的,打开方法:通过设置php.ini配置文件output_buffering = 4096 或者 在脚本中用系统函数ob_start()开启OB缓存 output buffering 中文的意思是:输出缓冲 . 它的功能是将PHP脚本中的输出部分全部放入OB缓存中而不是放入程序缓存.脚本运行结束后, OB缓存将全部内容集中放入程序缓存的末尾. 看如下代码: <?php ob_start(); //打开ob缓存 echo 'hello word'; //输出部分 header('content-type:text/html; charset=utf-8'); //程序部分 echo 'hello word'; //输出部分 ?> 输出效果:
神奇的事发生了,跟之前的代码一样.代码中依然是先输出了内容,然后再设置的头部信息.但是开启ob缓存后却没有报错.下面分析下流程:
在最后的程序缓存中,header()函数是在输出之前设置的,所以最后按顺序执行是不会报错的. OB缓存系列函数
ob_start()函数:打开输出缓冲区. ob_clean : 删除OB缓存区的内容 函数格式:void ob_clean(void) 说明:这个函数不会输出内部缓冲区的内容而是把它删除
ob_end_clean:删除OB缓存区的内容,并且关闭OB缓存区 ob_flush() : 将OB缓存的内容更新到程序缓存中,并清除OB缓存.
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com