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)
简单的解决方案:
fastcgi_keep_conn on; # < solution
proxy_buffering off;
gzip off;
Run Code Online (Sandbox Code Playgroud)