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');
}
4

1 回答 1

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 将为您压缩您的响应正文,并在响应中为您设置:

Content-Encoding: gzip

在意识到这两条线是多么简单之前,我花了我生命中的几个小时。并且不要隐含地使用任何冲洗

于 2012-10-03T18:51:02.980 回答