PHP 缓冲区 ob_rush() vs

ob_flush()flush()的区别是什么? 为什么我必须同时调用它们?

ob_flush()参考表示:

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

flush()参考表示:

刷新 PHP 的写缓冲区和 PHP 正在使用的后端(CGI、 Web 服务器等)。

然而,该公司继续表示:

[它]可能无法覆盖你的网络服务器的缓冲方案..。

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

71444 次浏览

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

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

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

不管怎样,都要用。

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

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

我想这和你的 flush1有关。使用输出缓冲的显著优势是当它与数据压缩一起使用时。如果您不使用 ob_gzhandler,那么几乎没有什么好处。只有 flush会提交服务器上仍然存在的任何输出数据。有了 ob_start和它的对应物 ob_flushob_end_cleanob_end_flush,任何等待被压缩的东西(看看 flushob_flush指的是不同的桶—— obflush发送数据,flush向浏览器发送数据——可能不准确,但这就是想法)将被包装并发送给客户端。

ob_flush()是高级同花顺。它刷新高级缓冲区,并将所有内容放在低级内部缓冲区中准备发送。

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

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

在此之下,还有套接字层缓冲区; 在此之下,还有网络层缓冲区。在最底层,电子顺着数据电缆排列。