用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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
使用sockets:从新闻组中获取文章(三)
Oct 09 PHP
我的群发邮件程序
Oct 09 PHP
html中select语句读取mysql表中内容
Oct 09 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
提高PHP编程效率的方法
Nov 07 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 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/12/13 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
快速入门Vue
2016/12/19 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
python 读写中文json的实例详解
2017/10/29 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
毕业自荐信
2013/12/16 职场文书
秘书英文求职信范文
2014/01/31 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
安全保证书范文
2014/04/29 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
普通党员对照检查材料
2014/09/24 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
父亲去世追悼词
2015/06/23 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技