用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 相关文章推荐
smarty 原来也不过如此~~呵呵
Nov 25 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php的一些小问题
Jul 03 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
php中define用法实例
Jul 30 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 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获得文件扩展名三法
2006/11/25 PHP
destoon官方标签大全
2014/06/20 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
微信小程序icon组件使用详解
2018/01/31 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
Python中collections模块的基本使用教程
2018/12/07 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python requests模块实例用法
2019/02/11 Python
QML使用Python的函数过程解析
2019/09/26 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
户外活动总结范文
2014/04/30 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
岳麓书院导游词
2015/02/03 职场文书
辩论赛主持人开场白
2015/05/29 职场文书