一尘不染

PHP缓冲区ob_flush()与flush()

php

什么之间的区别ob_flush(),并flush()和我为什么一定要同时调用?

ob_flush()参考说:

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

flush()参考说:

刷新PHP的写缓冲区以及PHP使用的任何后端PHP(CGI,Web服务器等)。

但是,它继续说:

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

因此,在我看来,我可以一直使用ob_flush()所有时间。但是,这样做会得到奇怪的结果。有人可以简单地解释一下这是怎么回事吗?


阅读 244

收藏
2020-05-26

共1个答案

一尘不染

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

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

现在,Web服务器本身可能实现了另一个缓冲方案(mod_deflate或内容过滤器),您对此没有影响。但这很少,因为它需要专门配置。

无论如何,请同时使用两者。

2020-05-26