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版(4)
Oct 09 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
php处理restful请求的路由类分享
Feb 27 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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 header函数分析详解
2011/08/06 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
javascript的函数
2007/01/31 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python输出各行命令详解
2018/02/01 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
企业军训感想
2014/02/07 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
商务司机岗位职责
2015/04/10 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android