【发布时间】:2019-05-15 02:57:28
【问题描述】:
我需要一个运行时间较长(7-8 秒)的 php 脚本,以便在发现部分结果时向用户输出部分结果。我以前可以通过执行以下操作使用旧版本的 php-fpm 和 nginx 来完成此操作:
- 在 php 中使用这些配置设置:
@ini_set('output_buffering', 0);
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ob_end_clean();
set_time_limit(0);
header('X-Accel-Buffering: no');
每次我需要输出部分结果时都运行ob_implicit_flush(1); flush();。
- 对 nginx 使用这些指令:
fastcgi_keep_conn on;
proxy_buffering off;
gzip off;
但是,随着升级到 PHP 7 和 nginx 1.10.3,这些设置不再起作用。
我已经尝试将这些指令添加到 nginx:
fastcgi_max_temp_file_size 0;
fastcgi_store off;
fastcgi_buffering off;
但这些似乎也没有任何作用。结果仍然被缓冲,直到 php 脚本完成运行,然后一次性发送。
我的要求还有可能吗?
(我很欣赏有关发送不涉及禁用缓冲区的部分结果的其他方法的建议,但这不是我的问题的一部分)。
【问题讨论】: