首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP buffer ob_flush() vs. flush()

PHP buffer ob_flush() vs. flush()
EN

Stack Overflow用户
提问于 2010-11-16 13:10:48
回答 4查看 68.5K关注 0票数 83

ob_flush()flush()之间有什么区别?为什么我必须同时调用它们?

ob_flush() reference说:

此函数将发送输出缓冲区(如果有)的内容。

flush() reference说:

刷新PHP的写缓冲区和任何后端PHP正在使用的东西(CGI,web服务器等)。

然而,它继续说:

它可能无法覆盖web服务器…的缓冲方案

所以,在我看来,我可以一直使用ob_flush()。然而,当我这样做的时候,我得到了奇怪的结果。有人能简单地解释一下这是怎么回事吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-16 13:18:54

ob_flush发送应用程序启动的缓冲区。在任何PHP脚本中可能有多个嵌套的ob_start()ob_flush将当前内容传递给上层。

PHP本身可能(根据自己的判断)缓冲输出。这取决于后端。但通常情况下,FastCGI自己有一个套接字缓冲区。因此,还需要调用flush()将当前内容发送到web服务器。

现在,web服务器本身可能会实现另一种缓冲方案(mod_deflate或内容过滤器),而您对此没有任何影响。但这种情况很少发生,因为它需要专门配置。

无论如何,两者都使用。

票数 76
EN

Stack Overflow用户

发布于 2010-11-16 13:30:56

ob_flush刷新您使用类似ob_start的函数创建的输出缓冲区

flush将脚本本身的缓冲输出刷新给其调用者

票数 35
EN

Stack Overflow用户

发布于 2011-05-21 22:39:57

ob_flush()是一种高级刷新。它刷新高级缓冲区,并将所有内容放入准备发送的低级内部缓冲区中。

  • 请注意,ob_函数家族创建了堆栈的缓冲区,因此,如果代码是为了利用这种堆栈而编写的,那么盲目地在任何地方编写ob_flush()确实会给您带来“奇怪的结果”。

flush()是一种低级刷新,它指示PHP刷新其内部低级数据缓冲区。

在这下面,将有套接字层缓冲区;在这下面,还有网络层缓冲区。在最低层,沿着数据线的电子队列。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4191385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档