PHP 缓冲区 ob_flush() 与 flush()

2022-08-30 08:12:46

和 之间有什么区别,为什么我必须同时调用两者?ob_flush()flush()

ob_flush() 引用说:

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

flush() 引用说:

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

但是,它继续说:

[它]可能无法覆盖Web服务器的缓冲方案...

所以,在我看来,我可以一直使用。但是,当我这样做时,我得到了奇怪的结果。有人能用简单的术语解释一下这里发生了什么吗?ob_flush()


答案 1

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

PHP 本身可以(自行决定)缓冲区输出。这取决于后端。但通常本身有一个套接字缓冲区。因此,还需要调用以将当前内容发送到Web服务器。FastCGIflush()

现在,Web服务器本身可能会实现另一种缓冲方案(或内容过滤器),您无法对其进行任何影响。但这很少见,因为它需要专门配置。mod_deflate

无论如何,两者都使用。


答案 2

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

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


推荐