PHP缓存机制OutputControl详解
在php5.2版本的配置中,默认output_buffering为关闭状态,因此运行下面三行代码将会出现一个警告:
Warning:Cannotmodifyheaderinformation-headersalreadysent
echo"hello1"; header("content-type:text/html;charset=utf-8"); echo"hello2";
开启OB缓存的方式有如下两种:
1.
启用了此指令,那么每个PHP脚本都相当于一开始就调用了ob_start()函数,PHP5.5默认已开启output_buffering=4096
2.
打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。
内部缓冲区的内容可以用ob_get_contents()函数复制到一个字符串变量中。想要输出存储在内部缓冲区中的内容,可以使用ob_end_flush()函数。另外,使用ob_end_clean()函数会静默丢弃掉缓冲区的内容。
/** *output_buffering=off情况下测试 */ ob_start();//开启ob缓存 echo"hello1";//存入ob缓存 header("content-type:text/html;charset=utf-8");//存入程序缓存 //ob_end_clean();//清空ob缓存,并关闭ob缓存 echo"hello2";//存入ob缓存 $str=ob_get_contents();//返回ob缓存的数据(不清除缓冲内容) file_put_contents("ob.txt",$str);//把$str保存到文件 //ob_clean();//清空ob缓存 echo"hello3";//存入ob缓存 echo"hello4";//存入ob缓存 /*此脚本将生成ob.txt文件,存入hello1hello2,浏览器输出hello1hello2hello3hello4*/ /*若ob_clean()注释打开,那么生成的ob.txt文件中将没有内容,浏览器输出hello3hello4*/ /*若ob_end_clean()注释打开,那么ob.txt中依然没有内容,因为关闭了ob缓存,浏览器输出hello2hello3hello4*/
ob_flush()与ob_end_flush()例子:
ob_start(); echo"abc";//存入ob缓存 header("content-type:text/html;charset=utf-8");//存入程序缓存 echo"hello";//存入ob缓存 ob_flush();//将ob缓存中的内容输出到程序缓存,清空ob缓存,不关闭ob缓存 //ob_end_flush()//将ob缓存中的内容输出到程序缓存,清空ob缓存,关闭ob缓存 echo"aa";//存入ob缓存 echoob_get_contents(); /*最后输出abchelloaaaa*/ /*注释ob_flush,打开ob_end_flush,最后输出abchelloaa*/
注意:
ob_end_flush()同理。
OB缓存的运行原理/原则:
1.ob缓存打开,echo的数据首先放入ob缓存
2.如果是header信息,直接放在程序缓存
3.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后一次返回给浏览器
最后还有一个flush();强制刷新PHP程序缓存到浏览器缓存。
特性:
echostr_repeat("",1024);//重复输出多个字符(解决浏览器缓存256字节之后再输出的情况) for($i=0;$i<5;$i++) { echo$i; flush();//强制刷新程序缓存到浏览器缓存 sleep(1); //休眠1秒钟,http连接未断开,每隔1秒输出$i }
相关文章
- php格式怎么转换为pdf,PHP如何将将word文件转为pdf
- PHP绘制图像
- PHP缓存类详解编程语言
- 安装php MySQL:步骤指南(安装phpmysql)
- PHP在Linux上安装:轻松快捷(php安装包linux)
- php socket 读取缓存区域详解编程语言
- 实现缓存PHP开启Redis超越缓存技术(php开启redis)
- PHP编译支持MySQL: 让你的网站更加强大和高效!(php编译支持mysql)
- PHP配置指南:MySQL编码设置详解(php设置mysql编码)
- PHP Redis扩展的下载方法介绍(phpredis下载)
- 使用PHP连接MySQL数据库实现数据操作(php连接mysql类)
- 基于PHP和MSSQL的连接设置(php mssql设置)
- MSSQL 数据库在PHP中的登录实现(mssql登录php)
- PHP框架下的Redis应用实现(用php redis)
- 中的应用使用Redis,提升PHP程序效率(redis缓存在php)
- php程序之die调试法快速解决错误
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- 介绍一些PHP判断变量的函数
- PHP输出缓存ob系列函数详解
- php中的curl使用入门教程和常见用法实例