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 标记的开头之前缓存内容,并且在接受到 标记之前,不会显示出整个表格。

一些版本的 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."
";

ob_flush();

flush();

sleep(1);

}

}

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: PHP逐行输出(ob_flush与flush的组合) http://www.chhua.com/web-note2670

相关笔记

更多

php flush 逐行显示_PHP逐行输出(ob_flush与flush的组合)相关推荐

  1. 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...

    我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...

  2. 深入理解ob_flush和flush的区别(转)

    ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑- 其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情.. ob_* ...

  3. 深入理解PHP中的ob_flush和flush的区别

    ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑- 其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情- ob_*系 ...

  4. PHP的ob_flush()与flush()区别

    说明:纯属个人实践中的理解以及一些总结,理解有误或有疑问之处,请告知,共同进步. 一.首先说一下buffer. buffer是指内存地址空间. 1.Linux系统默认大小一般为4096(4kb). 其 ...

  5. php ob_flush 和flush

    "ob_flush()和flush()的区别.前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器.所以当缓冲存在的时候,我们必须ob_flush( ...

  6. php的ob_flush和flush(转)

    php.ini中 output_buffering = off 关闭php的缓存 implicit_flush = Off php不会立即输出到浏览器.如果是ON,相当于每次ECHO 立刻执行一个FL ...

  7. 逐行计算、逐行递延、逐行更新

    -- 逐行计算.逐行递延.逐行更新 declare @tb table (工号 int, 姓名 nvarchar(10), 数量 int, 基数 int, 开始号 int, 终止号 int)   in ...

  8. matlab中怎么使用disp函数显示一句话同时输出变量值呢?

    今天在写matlab程序的时候,发现之前matlab输入input和输出output函数的使用有点遗忘,于是决定记录下来这些零碎的知识点. 那么disp如何显示一句话同时输出变量值呢? 参考的disp ...

  9. 手机内部充电电流控制原理图(如果手机支持快充,比如支持9V快充,则通过充电接口的D+、D-二根线,输出对应的高低电平组合,FP6601就会控制它的3脚接地,4脚悬空,此时R3与R2并联,改变反馈下拉)

    手机内部充电电流控制原理图 来源:电工之家•作者:电工之家• 2019-12-08 10:48 • 7365次阅读 0 手机充电器电流控制方面: 现在的手机充电器,无一例外,都使用了隔离式开关电源电路 ...

最新文章

  1. Linux笔记:使用Vim编辑器
  2. 【OpenCV 4开发详解】图像连接
  3. LeetCode 152. Maximum Product Subarray--动态规划--C++,Python解法
  4. poj 3660 Cow Contest
  5. 漫 谈oracle 中 的 空 值
  6. 在Linux 上安装WAS7.0
  7. 同步屏障CyclicBarrier
  8. hypermesh 复合材料_【技术邻】HyperMesh复合材料建模——坐标系调整
  9. python之setdefault()和defaultdict()处理缺失值的键
  10. FLASK安装--兼收EZ_INSTALL及PIP
  11. 误Ghost数据恢复图文教程
  12. MakeApie 将于 2月15号开始暂停服务
  13. 存储和多屏互动,蜂鸟网的NAS应用解析
  14. LZJ的python第6次打卡
  15. C#贪吃蛇小游戏 毕业设计用
  16. 免费在线汉字简体繁体转换工具
  17. Android-Application被回收引发空指针异常分析(消灭全局变量)
  18. android 自定义按钮边角有阴影,Android CardView使用elevation设置阴影去掉边角背景解决办法 | 夕辞...
  19. return int()函数 c++解说
  20. PTA 7-5 字符串的连接

热门文章

  1. Idea设置多开窗口
  2. cygwin-1.7 离线安装包_.NET Framework所有版本微软官方下载地址
  3. java行转列_最近面试 Java 后端开发的感受!
  4. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型
  5. wap base.inc.php,MetInfo database.inc.php配置
  6. oracle adg 人工干预,Oracle DataGuard
  7. OpenShift 4 - 使用Prometheus监控Node节点
  8. OpenShift 4 之Service Mesh教程(6)- 根据Header路由请求
  9. .net core精彩实例分享 -- 泛型和集合
  10. linux主设备号作用是什么,linux 主设备号为1 以及/dev/null的介绍