嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2016-08-20 1118 次浏览 标签 : php

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

ob_start();
echo 'aaa';
sleep(2);
echo "111";
ob_flush();

等待2秒同时输出aaa111

ob_start();
echo 'aaa';
ob_flush();
sleep(2);
echo "111";

立即输出aaa,2秒后输出111

ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…

其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..ob_*系列函数, 是操作PHP本身的输出缓冲区.

所以, ob_flush是刷新PHP自身的缓冲区.而flush, 严格来讲, 这个只有在 PHP 做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新 WebServer (可以认为特指apache) 的缓冲区.

apache modulesapi下, flush会通过调用sapi_moduleflush成员函数指针, 间接的调用apache的api: ap_rflush刷新apache的输出缓冲区.

所以, 正确使用俩者的顺序是:

ob_flush, 然后flush.当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用.

ob_flush和flush的区别

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表