PHP ob_gzhandler额外的字符

时间:2014-12-01 22:05:52

标签: php magento expressionengine

我有一个混合网站,我们有一个带有Magento商店的ExpressionEngine CMS。 在我们的EE网站中,我有一个模板,我在其中调用插件来检索商店购物车信息。 我们使用Magento的身份验证,因此登录的用户是Magento用户。

我们希望展示这样的内容:

first

插件中的代码连接到Magento,获取登录用户(如果他们已登录)并设置购物车项目数。

这是插件应该返回到模板的HTML:

<span class="carticon">(0)</span><a href="http://www.example.com/store/checkout/cart/">My Cart</a><span>Welcome, MB34!</span><a href="http://www.example.com/store/customer/account/logout/">Logout</a>

但是,如果我在ExpressionEngine上启用gZip,我会得到 ERR_CONTENT_DECODING_FAILED 异常,因为Magento没有内置的gZip。目前我们没有启用mod_deflate,那么EE如何能够进行gZip?它必须通过ob_gzhandler。

现在,如果我修改我的插件以使用这样的ob_gzhandler:

ob_start("ob_gzhandler");
echo trim($result);
ob_end_flush();

我在输出结尾处获得了额外的字符:

second

任何想法导致了这个以及如何解决它?

我们很快就会启用mod_deflate;会解决它吗?我的意思是我不必使用ob_gzhandler,对吗?

2 个答案:

答案 0 :(得分:0)

使用ob_gzhandler时,重要的是不要将内容与其他编码混合在一起。通过强制ob_end_flush(),您可能会在实际发送内容之前导致此缓冲区终止。文件末尾的一个简单空行可能导致这种情况。我建议你跳过ob_end_flush()并让缓冲区在PHP脚本终止时自然结束。

答案 1 :(得分:0)

使用ob_get_contents

时,此代码适用于我
ob_start("ob_gzhandler"); 
echo trim($result); 
$gzcontent = ob_get_contents(); 
ob_end_clean();