关于ob_flush和flush在FPM上不起作用的问题

问题描述 投票:0回答:1

我有下面的代码,想要一一显示回显,但整个结果立即返回


<?php 



for ($i = 1; $i <= 10; $i++){

  

  sleep(1); 

  echo "$i\n";

  

  ob_flush();

    flush();

  

}

在 CGI 中可以,但在 FPM 中不行(PHP 8.3 - apache 2.4)

我尝试了多种方法来解决这个问题,但这些解决方案都不起作用。 以下是其中一些:

ini_set('output_buffering','Off');
ini_set('zlib.output_compression',0);
ini_set('implicit_flush',1);
ob_end_clean();
set_time_limit(0);
ob_implicit_flush(true);
ob_end_flush();
ob_start();

有什么解决办法吗?

php apache flush fpm
1个回答
-1
投票

使用 NGINX 时,将

fastcgi_buffering
设置为
off
,以将响应立即同步传递给客户端。

使用 Apache 时,使用

mod_fastcgi
,将
-flush
选项添加到 Apache 的
FastCgiExternalServer
指令中,否则如果启用了
mod_deflate
/
gzip
,Apache 将缓冲整个响应并延迟到最后才交付它致客户:

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -flush -host 127.0.0.1:9000 -pass-header Authorization

源代码和其他解决方案:Streaming PHP - 在 PHP、Apache、Nginx 和 Varnish 中禁用输出缓冲 @ Jeff Geerling

© www.soinside.com 2019 - 2024. All rights reserved.