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 module
的sapi
下, flush
会通过调用sapi_module
的flush
成员函数指针, 间接的调用apache
的api: ap_rflush
刷新apache
的输出缓冲区.
所以, 正确使用俩者的顺序是:
先ob_flush
, 然后flush
.当然, 在其他sapi
下, 不调用flush
也可以, 只不过为了保证你代码的可移植性, 建议配套使用.