我需要长时间运行(7-8秒)的php脚本,以便在找到结果时向用户输出部分结果。我以前可以通过执行以下操作来使用较旧版本的php-fpm和nginx完成此操作:
@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();
。
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脚本完成运行,然后立即全部发送。
我要的仍然可行吗?
(我很高兴地建议,还有其他方法可以发送不包含禁用缓冲区的部分结果,但这不属于我的问题)。
答案 0 :(得分:1)
认为唯一的方法是将初始脚本拆分为多个脚本。
然后您可以使用ajax从前端调用每个脚本并将内容附加到dom。
PHP脚本大部分时间都是同步的。但是通过执行ajax调用(运行异步代码),您可以并行执行多个php脚本。