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 相关文章推荐
使用PHP模拟HTTP认证
Oct 09 PHP
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
利用PHP创建动态图像
Oct 09 PHP
PHP新手上路(二)
Oct 09 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
你应该知道PHP浮点数知识
May 13 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
php微信公众号开发之秒杀
Oct 20 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
zend framework重定向方法小结
2016/05/28 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
python+selenium开发环境搭建图文教程
2017/08/11 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python实现图片插入文字
2019/11/26 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
GWebs公司笔试题
2012/05/04 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
Ruby如何创建一个线程
2013/03/10 面试题
架构师岗位职责
2013/11/18 职场文书
土木工程师岗位职责
2013/11/24 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
干部考察材料范文
2014/12/24 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
详解SQL的窗口函数
2022/04/21 Oracle