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脚本的10个技巧(8)
Oct 09 PHP
PHP中动态HTML的输出技术
Oct 09 PHP
谈谈PHP的输入输出流
Feb 14 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
PHP下对数组进行排序的函数
Aug 08 PHP
php注销代码(session注销)
May 31 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
Aug 17 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
TP5框架安全机制实例分析
Apr 05 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自定义函数之递归删除文件及目录
2010/08/08 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
Yii实现简单分页的方法
2016/04/29 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
JavaScript单元测试ABC
2012/04/12 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
理解javascript模块化
2016/03/28 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
Python IDLE入门简介
2017/12/08 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
个人校本研修方案
2014/05/26 职场文书
股指期货心得体会
2014/09/10 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
公司员工辞职信范文
2015/05/12 职场文书
爱国主题班会教案
2015/08/14 职场文书