用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 相关文章推荐
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php调用mysql数据 dbclass类
May 07 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
php生成二维码图片方法汇总
Dec 17 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
php的常量和变量实例详解
Jun 27 PHP
php实现socket推送技术的示例
Dec 20 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
JS高级运动实例分析
2016/12/20 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
判断python字典中key是否存在的两种方法
2018/08/10 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
工商企业管理应届生求职信
2014/05/04 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
工程催款通知书
2015/04/17 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
详解java如何集成swagger组件
2021/06/21 Java/Android
Python多线程 Queue 模块常见用法
2021/07/04 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers