Ben*_*Ben 76 php flush output-buffering
我ob_flush()和flush()两个人之间有什么区别?
该ob_flush()参考说:
此函数将发送输出缓冲区的内容(如果有).
该flush()参考说:
刷新PHP的写缓冲区以及PHP正在使用的任何后端(CGI,Web服务器等).
但是,它继续说:
[它]可能无法覆盖您的Web服务器的缓冲方案......
所以,在我看来,我可以只使用ob_flush()所有的时间.但是,当我这样做时,我得到了奇怪的结果.有人可以用简单的语言解释这里发生了什么吗?
mar*_*rio 73
ob_flush发送应用程序启动的缓冲区.ob_start()任何PHP脚本中都可能有多个嵌套.ob_flush将当前内容传递给上层.
PHP本身可能(根据自己的判断)缓冲输出.这取决于后端.但通常FastCGI有自己的套接字缓冲区.因此,还flush()需要调用将当前内容发送到Web服务器.
现在,Web服务器本身可能会实现另一个缓冲方案(mod_deflate或内容过滤器),您无法对其进行影响.但这很少,因为它需要专门配置.
无论如何,使用两者.
Lig*_*ica 24
ob_flush()是一个高级同花顺.它刷新高级缓冲区并将所有内容放入低级内部缓冲区中以供发送.
ob_函数族创建了缓冲区堆栈,因此,ob_flush()如果编写代码以利用此堆栈,那么盲目地在任何地方写入确实会给您"奇怪的结果".flush() 是一个低级刷新,指示PHP刷新其内部的低级数据缓冲区.
在那之下,还会有套接字层缓冲区; 在此之下,有网络层缓冲区.并且,在最低级别,电子队列沿着数据线传输.