PHP逐行输出(ob_flush与flush的组合)


Posted in PHP onFebruary 04, 2012

ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…
其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..
ob_*系列函数, 是操作PHP本身的输出缓冲区.
所以, ob_flush是刷新PHP自身的缓冲区.
而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.
在apache module的sapi下, flush会通过调用sapi_module的flush成员函数指针, 间接的调用apache的api: ap_rflush刷新apache的输出缓冲区, 当然手册中也说了, 有一些apache的其他模块, 可能会改变这个动作的结果..
有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。
甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。
一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
所以, 正确使用俩者的顺序是. 先ob_flush, 然后flush,
当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用.
在IE 中,必须先输出256个字节,才起作用,如下代码:

function execte(){ 
echo str_pad(" ", 256); 
for ($i=1;$i<10;$i++){ 
echo $i."<Br>"; 
ob_flush(); 
flush(); 
sleep(1); 
} 
}
PHP 相关文章推荐
初探PHP5
Oct 09 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
PHP中文件上传的一个问题
Sep 04 PHP
请离开include_once和require_once
Jul 18 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
php接口技术实例详解
Dec 07 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 #PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 #PHP
PHP的博客ping服务代码
Feb 04 #PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 #PHP
PHP常用技巧总结(附函数代码)
Feb 04 #PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 #PHP
php中global和$GLOBALS[]的分析之一
Feb 02 #PHP
You might like
第十二节--类的自动加载
2006/11/16 PHP
php 进度条实现代码
2009/03/10 PHP
PHP中的float类型使用说明
2010/07/27 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
python关键字and和or用法实例
2015/05/28 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
python logging日志模块原理及操作解析
2019/10/12 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
EJB的角色和三个对象
2015/12/31 面试题
搞笑结婚保证书
2015/05/08 职场文书
灵魂歌王观后感
2015/06/17 职场文书
新学期开学标语2015
2015/07/16 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python