2012-09-17 40 views
3

我正在写在PHP server sent event流,我收到错误消息:PHP gzip和服务器发送的事件流

"failed to flush buffer zlib output compression"

我相信这是在试图刷新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'); 
} 

回答

2

不能沿着ob_输出处理程序使用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的将gzip压缩的响应主体为你,它会在响应中设置此为您提供:

Content-Encoding: gzip 

我花了几个小时我的在这之前就意识到这两条线的简单性。并且根本不使用任何冲洗