PHP GZip和服务器发送事件流

3
我正在用PHP编写一个服务器发送事件流,但是遇到了以下错误:

"无法刷新缓冲区zlib输出压缩"

我认为这是由于尝试刷新gzipped输出所致。
下面是我的PHP代码:
header ("Content-Type: text/event-stream\n\n");
header ("Cache-Control: no-cache");

echo "data: {$json}";
echo "\n\n";

ob_flush(); // ERROR HERE
flush();

我的问题是如何最好地让它运作起来 - 最好不要禁用Apache中的gzip - 是否可以在PHP中关闭它?
我尝试了这个方法,但没有成功:
if(ini_get('zlib.output_compression')){
    ini_set('zlib.output_compression', 'Off');
}
1个回答

3
您不能在ob_输出处理程序中使用zlib输出压缩。请查看php文档中有关zlib.output_compression的说明,其中多次说明了此限制。
我发现启用php输出压缩的最简单方法是只需执行以下操作:
ini_set("zlib.output_compression", 1);
ini_set("zlib.output_compression_level", 9);

请将所有ob_*相关内容删除。现在当客户端请求一个带有以下头部的页面时:

Accept-Encoding: gzip, deflate

zlib可以为您压缩响应正文,并在响应中为您设置此内容:

Content-Encoding: gzip

在意识到这两行代码的简单性之前,我花费了数小时的时间。请不要隐式地使用任何flush。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接