PHP持续向浏览器输出内容的方法


这个课题很久很久以前我就写过~ 不过,当时还不太了解当web服务存在压缩配置的时候,会无法输出到浏览器上的问题。

根据我上一篇博文的启发,我尝试使用header通知web服务,此内容不压缩。

结果确实可行。

上代码:

<?php 
// 告知web服务器,内容不压缩
header('Content-Encoding: identity', true);
// 如果使用了session,并且还是文件系统session,则需要关闭session的写入。否则其他同session的请求会被hang住。
session_write_close();

for ($i = 0; $i < 5; ++$i) {
    echo $i, ' ', date('Y-m-d H:i:s'), str_repeat(' ', 4096), PHP_EOL;
    ob_flush();
    flush();
    sleep(1);
}
echo 'done', PHP_EOL;

几个点:

  1. web服务器如果开启了压缩,则flush后,是flush到web服务器的压缩缓冲区,等待内容完整输出后,进行压缩输出
  2. 如果开启了文件系统session,那么需要及时关闭session写入。防止同session请求无法获取session文件写权限导致hang住
  3. 一般浏览器都有一定的缓冲区,如果输出内容过短,也不会显示出来(虽说已经发到浏览器了)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注