php 刷新不起作用

2022-08-30 22:31:48
<?php
for($i=0;$i<20;$i++)
{
    echo 'printing...<br />';
    ob_flush();
    flush();

    usleep(300000);
}

?>

包含代码的网址:http://domainsoutlook.com/sandbox/delayed.php

我有一个专用服务器,所以我可以进行更改。我正在运行apache和nginx作为代理服务器。


答案 1

这就是我发现的:

Flush在Apache的mod_gzip或Nginx的gzip下不起作用,因为从逻辑上讲,它是gzip内容,要做到这一点,它必须缓冲内容以gzip它。任何类型的Web服务器gzipping都会影响这一点。简而言之,在服务器端,我们需要禁用gzip并减小fastcgi缓冲区大小。所以:

  • 在 php.ini 中:

    .output_buffering = 关

    .zlib.output_compression = 关

  • 在nginx.conf中:

    .gzip off;

    .proxy_buffering关闭;

手头也有这行,特别是如果你没有访问php.ini:

  • @ini_set(“zlib.output_compression”,0);

  • @ini_set('implicit_flush',1);

  • @ob_end_clean();

  • set_time_limit(0);

最后,如果你有它,请在下面设置代码:

  • ob_start(“ob_gzhandler”);

  • ob_flush();

PHP 测试代码:

ob_implicit_flush(1);

for($i=0; $i<10; $i++){
    echo $i;

    //this is for the buffer achieve the minimum size in order to flush data
    echo str_repeat(' ',1024*64);

    sleep(1);
}

答案 2

您正在使用没有 ,因此没有什么可以冲洗的。ob_flushob_start

它还取决于Web服务器和代理及其设置。

您应该禁用Nginx的缓冲(添加到配置文件并重新启动Nginx)proxy_buffering off;

另外,请检查您的 php.ini 是否包含 和 。output_buffering = Offzlib.output_compression = Off


推荐