ob_flush()和flush()之间有什么区别?为什么我必须同时调用它们?
ob_flush() reference说:
此函数将发送输出缓冲区(如果有)的内容。
flush() reference说:
刷新PHP的写缓冲区和任何后端PHP正在使用的东西(CGI,web服务器等)。
然而,它继续说:
它可能无法覆盖web服务器…的缓冲方案
所以,在我看来,我可以一直使用ob_flush()。然而,当我这样做的时候,我得到了奇怪的结果。有人能简单地解释一下这是怎么回事吗?
发布于 2010-11-16 13:18:54
ob_flush发送应用程序启动的缓冲区。在任何PHP脚本中可能有多个嵌套的ob_start()。ob_flush将当前内容传递给上层。
PHP本身可能(根据自己的判断)缓冲输出。这取决于后端。但通常情况下,FastCGI自己有一个套接字缓冲区。因此,还需要调用flush()将当前内容发送到web服务器。
现在,web服务器本身可能会实现另一种缓冲方案(mod_deflate或内容过滤器),而您对此没有任何影响。但这种情况很少发生,因为它需要专门配置。
无论如何,两者都使用。
发布于 2010-11-16 13:30:56
ob_flush刷新您使用类似ob_start的函数创建的输出缓冲区
flush将脚本本身的缓冲输出刷新给其调用者
发布于 2011-05-21 22:39:57
ob_flush()是一种高级刷新。它刷新高级缓冲区,并将所有内容放入准备发送的低级内部缓冲区中。
ob_函数家族创建了堆栈的缓冲区,因此,如果代码是为了利用这种堆栈而编写的,那么盲目地在任何地方编写ob_flush()确实会给您带来“奇怪的结果”。flush()是一种低级刷新,它指示PHP刷新其内部低级数据缓冲区。
在这下面,将有套接字层缓冲区;在这下面,还有网络层缓冲区。在最低层,沿着数据线的电子队列。
https://stackoverflow.com/questions/4191385
复制相似问题