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

Lea*_*don 16 php fastcgi nginx

我们的代码与此类似:

<?php
    ob_implicit_flush(true);
    ob_end_flush();

    foreach ($arrayOfStrings as $string) {
        echo time_expensive_function($string);
    }
?>
Run Code Online (Sandbox Code Playgroud)

在Apache中,这会在输出时将每个echo发送到浏览器.然而,在nginx/FastCGI中,由于nginx的工作方式(默认情况下),这不起作用.

有可能使这个工作在nginx/FastCGI上,如果是这样,怎么样?

小智 26

上述解决方案均不适合我.

首先php必须正确刷新所有内容:

@ob_end_flush();
@flush();
Run Code Online (Sandbox Code Playgroud)

然后,我找到两个有效的解决方案:

1)通过Nginx配置:

fastcgi_buffering off;
Run Code Online (Sandbox Code Playgroud)

2)通过PHP代码中的HTTP头

header('X-Accel-Buffering: no');
Run Code Online (Sandbox Code Playgroud)

  • 只添加`header('X-Accel-Buffering:no');`为我工作:) (9认同)
  • 谢谢!`header('X-Accel-Buffering:no');`也为我工作! (2认同)

Ond*_*zka 5

简单的解决方案:

fastcgi_keep_conn on; # < solution

proxy_buffering off;
gzip off;
Run Code Online (Sandbox Code Playgroud)