PHP GZip和服务器发送事件流

时间:2012-09-17 11:27:40

标签: php gzip server-sent-events

我正在用PHP写一个server sent event流,我收到错误:

  

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

我认为这是因为尝试刷新gzip压缩输出。

这是我的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 个答案:

答案 0 :(得分:2)

您不能沿ob_ output处理程序使用zlib输出压缩。请参阅zlib.output_compression上的php文档,它多次声明。

如果发现在php中启用输出压缩的最简单方法就是这样做:

ini_set("zlib.output_compression", 1);
ini_set("zlib.output_compression_level", 9);

松开所有ob_ *的东西。现在,当客户端请求包含如下标题的页面时:

Accept-Encoding: gzip, deflate

zlib将为您解压缩您的响应正文,并在响应中为您设置此响应:

Content-Encoding: gzip

我花了几个小时的生命才意识到这两条线是多么简单。并且根本不要使用任何冲洗