用PHP的ob_start() 控制您的浏览器cache


Posted in PHP onAugust 03, 2009

输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。
我们先举一个简单的例子,让大家对Output Control有一个大致的印象:
Example 1.

<?php 
ob_start(); //打开缓冲区 
echo \"Hellon\"; //输出 
header("location:index.php"); //把浏览器重定向到index.php 
ob_end_flush();//输出全部内容到浏览器 
?>

所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:"Header had all ready send by"!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
一、 相关函数简介:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
二、深入了解:
1. 关于Flush函数:
这个函数在PHP3中就出现了,是一个效率很高的函数,他有一个非常有用的功能就是刷新browser的cache.我们举一个运行效果非常明显的例子来说明flush.
Example 2.
<?php 
for($i = 1; $i <= 300; $i++ ) print(" "); 
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出 
// 换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经 
// 过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会 
// 源源不断的被发送出去。 
For($j = 1; $j <= 20; $j++) { 
echo $j." 
"; 
flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上 
sleep(1); //让程序"睡"一秒钟,会让你把效果看得更清楚 
} 
?>
PHP 相关文章推荐
PHP校验ISBN码的函数代码
Jan 17 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 PHP
一贴学会PHP 新手入门教程
Aug 03 #PHP
php 获得汉字拼音首字母的函数
Aug 01 #PHP
PHP 上传文件的方法(类)
Jul 30 #PHP
PHP 文章中的远程图片采集到本地的代码
Jul 30 #PHP
PHP 中文乱码解决办法总结分析
Jul 30 #PHP
PHP 变量定义和变量替换的方法
Jul 30 #PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 #PHP
You might like
用javascript作一个通用向导说明
2011/08/30 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python监控进程脚本
2018/04/12 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
初三家长会邀请函
2014/01/18 职场文书
就业表自我评价分享
2014/02/06 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
小学一年级学生评语
2014/04/22 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书