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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php xml常用函数的集合(比较详细)
Jun 06 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php定时执行任务设置详解
Feb 06 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 PHP
php实现登录页面的简单实例
Sep 29 PHP
php array_map()函数实例用法
Mar 03 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php实现头像上传预览功能
2017/04/27 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
express启用https使用小记
2019/05/21 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python处理json数据中的中文
2014/03/06 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python图算法实例分析
2016/08/13 Python
python实现海螺图片的方法示例
2019/05/12 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
施工资料员岗位职责
2014/01/06 职场文书
后进生转化工作制度
2014/01/17 职场文书
环保倡议书400字
2014/05/15 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
JVM之方法返回地址详解
2022/02/28 Java/Android