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 相关文章推荐
生成缩略图
Oct 09 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
php中的strpos使用示例
Feb 27 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php生成shtml类用法实例
Dec 09 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
分享10段PHP常用代码
2015/11/11 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python编程实现归并排序
2017/04/14 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
详解python之协程gevent模块
2018/06/14 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
安全生产中长期规划实施方案
2014/02/21 职场文书
会计学自荐信
2014/06/03 职场文书
基层党支部整改方案
2014/10/25 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
golang中的struct操作
2021/11/11 Golang