如何在PHP应用程序的nginx中禁用输出缓冲

我们有这样的代码:

<?php ob_implicit_flush(true); ob_end_flush(); foreach ($arrayOfStrings as $string) { echo time_expensive_function($string); } ?> 

在Apache中,这会在输出时将每个回显发送到浏览器。 然而,在nginx / FastCGI中,由于nginx的工作方式(默认),这是行不通的。

是否有可能使这个工作在nginx / FastCGI,如果是这样,如何?

上述解决方案都不适合我。

首先,PHP必须正确地刷新一切:

 @ob_end_flush(); @flush(); 

然后,我发现了两个工作解决方案:

1)通过Nginx配置:

 fastcgi_buffering off; 

2)通过PHP代码中的HTTP头

 header('X-Accel-Buffering: no'); 

简易解决方案

 fastcgi_keep_conn on; # < solution proxy_buffering off; gzip off; 

我不想关闭整个服务器或整个目录的gzip,只是为了几个脚本,在一些特定的情况下。

所有你需要的是这个之前什么是回声:

 header('Content-Encoding: none;'); 

然后照常冲洗:

 ob_end_flush(); flush(); 

Nginx似乎已经关闭了编码,而不是gzip。

在循环中添加flush()函数:

 foreach ($arrayOfStrings as $string) { echo time_expensive_function($string); flush(); } 

它可能会工作,但不一定每次迭代(有一些魔术参与!)