gpt4 book ai didi

php - 在 Nginx/PHP-FPM 上使用 PHP ob_flush 刷新输出

转载 作者:行者123 更新时间:2023-12-02 00:52:09 25 4
gpt4 key购买 nike

我正在尝试执行一个 PHP 脚本,该脚本在执行期间提供当前状态/已完成操作的百分比。为此,我使用 AJAX 调用脚本,并在脚本执行期间使用 ob_flush 将输出发送到客户端,它在 Apache 上工作,但现在我将项目移植到 Nginx 上,我需要两者的兼容性。在 Nginx 上,我使用 PHP-FPM 来处理 PHP 文件,这是我试图正确运行的测试脚本:

//SET CORRECT CONTENT-TYPE (THEY WILL BE JSON STRINGS SEPARED BY BREAKLINE)
header('Content-type: text/plain; charset=utf-8');
//DISABLE GZIP FOR THE SCRIPT
ini_set('zlib.output_compression', 'Off');
ini_set('output_buffering', 'Off');
ini_set('output_handler', '');

ob_end_clean();
set_time_limit(0);

for ( $i = 0 ; $i < 5 ; $i++ ){
echo "{\"code\":" . $i . "}\n";
//SEND OUTPUT TO CLIENT
flush();
ob_flush();
sleep(1);
}

问题是,当我运行它时,我会在脚本结束执行时得到输出,大约 5 秒后。有人可以告诉我我做错了什么吗?

最佳答案

您应该设置 HTTP 响应 header 'X-Accel-Buffering'当您不希望 Nginx 缓冲响应时设置为“否”来自 FastCGI 服务器。

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering

关于php - 在 Nginx/PHP-FPM 上使用 PHP ob_flush 刷新输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com