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 之入门篇
Dec 04 PHP
php+javascript的日历控件
Nov 19 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
实例讲解php数据访问
May 09 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
PHP中isset、empty的用法与区别示例详解
Nov 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python复制文件操作实例详解
2015/11/10 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
通过实例了解python property属性
2019/11/01 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
教师个人年度总结
2015/02/11 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Python机器学习之底层实现KNN
2021/06/20 Python
 Python 中 logging 模块使用详情
2022/03/03 Python
python热力图实现的完整实例
2022/06/25 Python