用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摘要生成函数(无乱码)
Feb 04 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
如何设置mysql允许外网访问
Jun 04 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
详解PHP设计模式之依赖注入模式
May 25 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
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python实现二叉查找树实例代码
2018/02/08 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Python实现括号匹配方法详解
2020/02/10 Python
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
小班下学期评语
2014/05/04 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
Mysql基础之常见函数
2021/04/22 MySQL
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis