首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在HHVM的php代码中禁用gzip?(如设置content-encoding头部)

如何在HHVM的php代码中禁用gzip?(如设置content-encoding头部)
EN

Stack Overflow用户
提问于 2014-05-08 19:40:57
回答 1查看 926关注 0票数 2

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

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

代码语言:javascript
复制
header('Content-Encoding: none;');

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

// Emails sent here

echo "Emails sent.";

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

使用HHVM (和nginx),设置Content-encoding头部是有效的(它显示在浏览器中),但hhvm或nginx忽略它并将页面作为gzipped内容发送,因此浏览器使用二进制数据解释content-encoding=none。

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

(我知道我可以在配置文件中关闭它,但我希望它在几乎所有页面加载时都保持打开,除了几个运行速度较慢的页面。)

EN

回答 1

Stack Overflow用户

发布于 2014-05-09 10:11:04

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

更好的解决方案:

当你在后台工作时,保持连接打开(浏览器加载条旋转)通常被认为是不好的做法。

从PHP5.3.3开始,有一个方法fastcgi_finish_request(),它刷新数据并关闭连接,同时它继续在后台工作。

现在,this is unfortunately not supported yet on HHVM。然而,有一种替代方法可以做到这一点。

HHVM替代方案:

您可以改用register_postsend_function('function_name');。这将关闭连接,给定的函数将在后台执行。

下面是一个示例:

代码语言:javascript
复制
<?php

echo "and ...";

register_postsend_function(function() {
  echo "... you should not be seeing this";
  sleep("10"); // do a lot of work
});

die();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23540726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档