这个课题很久很久以前我就写过~ 不过,当时还不太了解当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;
几个点:
- web服务器如果开启了压缩,则flush后,是flush到web服务器的压缩缓冲区,等待内容完整输出后,进行压缩输出
- 如果开启了文件系统session,那么需要及时关闭session写入。防止同session请求无法获取session文件写权限导致hang住
- 一般浏览器都有一定的缓冲区,如果输出内容过短,也不会显示出来(虽说已经发到浏览器了)