如何在HHVM的php代码中禁用gzip?(例如设置内容编码头)

如何在HHVM的php代码中禁用gzip?(例如设置内容编码头),php,nginx,http-headers,gzip,hhvm,Php,Nginx,Http Headers,Gzip,Hhvm,我正在将php代码转换为hhvm。在发送一些电子邮件和其他一些缓慢的任务,然后更新状态消息之前,某个页面有时需要向浏览器刷新()状态消息 在hhvm(使用php fpm和nginx)之前,我使用了: 因此,内容编码停止使用gzip,然后刷新发送第一条消息,然后在页面结束时发送第二条消息 使用HHVM(和nginx),设置内容编码头是可行的(它会显示在浏览器中),但HHVM或nginx会忽略它并将页面作为gzip内容发送,因此浏览器会使用二进制数据解释内容编码=无 如何在HHVM的php代码中禁用

我正在将php代码转换为hhvm。在发送一些电子邮件和其他一些缓慢的任务,然后更新状态消息之前,某个页面有时需要向浏览器刷新()状态消息

在hhvm(使用php fpm和nginx)之前,我使用了:

因此,内容编码停止使用gzip,然后刷新发送第一条消息,然后在页面结束时发送第二条消息

使用HHVM(和nginx),设置内容编码头是可行的(它会显示在浏览器中),但HHVM或nginx会忽略它并将页面作为gzip内容发送,因此浏览器会使用二进制数据解释内容编码=无

如何在HHVM的php代码中禁用gzip


(我知道我可以在配置文件中关闭它,但我希望它在几乎每个页面加载时都保持打开状态,只有少数页面会运行得更慢。)

虽然我的建议是使用不同的gzip配置使用不同的nginx位置路径,但这里有一个更好的替代解决方案来实现您想要的效果

更好的解决方案: 在后台工作时保持连接打开(浏览器加载栏旋转)通常被称为不好的做法

由于PHP5.3.3,有一种方法可以刷新数据并关闭连接,同时在后台继续工作

现在。然而,有另一种方法可以做到这一点

HHVM备选方案: 您可以使用
register\u postsend\u函数(“函数名称”)取而代之。这将关闭连接,并且给定的函数将在后台执行

以下是一个例子:
最好保持内容为纯文本,让nginx处理gzip。您可以为nginx(针对特定的url模式)创建一个自定义规则,以避免gzip输出。这听起来怎么样?@Sina谢谢,澄清一下:php代码不是在做gzip,只是在nginx中,但在这种情况下它不应该做gzip,因为它是分两部分发送的。自定义规则将是最后的手段(这意味着重新构造大量代码,这将是恼人的,因为它一直在我们的旧设置下工作。)我认为这可能是一个hhvm错误,我在这里发布了一个问题:有完全相同的问题。有什么解决办法吗?我当时放弃了,从那以后就再也没有尝试过HHVM。现在php7已经发布,运行速度也差不多了,我们还是坚持下去吧。谢谢@Sina,这对一些人来说是个不错的选择。但在我的情况下,第二条状态消息比第一条更重要(后台任务通常只需要2-3秒)。因此,在我的情况下,最好保持连接打开并删除第一条状态消息,而不要丢失第二条状态消息。
header('Content-Encoding: none;');

echo "About to send emails...";
if (ob_get_level() > 0) { ob_end_flush(); }
flush();

// Emails sent here

echo "Emails sent.";