2017-04-04 262 views
0

我使用“ob_gzhandler”来压缩内容。这是我的代码:为什么ob_gzhandler无法正常工作?

<?php 
ob_start("ob_gzhandler"); 
?> 
<html> 
<body> 
<p>This should be a compressed page.</p> 
</body> 
</html> 

不要抛出任何错误,但压缩操作不起作用! in“检查元素”不是“content-encoding:gzip”短语!

enter image description here

我的系统信息:

的Apache/2.4.23(Win64中)PHP/25年6月5日 - 为Apache定义的端口:80

回答

2

PHP文档说,这ob_gzhandler要求安装zlib扩展,所以请确保它是真实的:

if (extension_loaded('zlib')){ 
    echo "zlib installed"; 
} 

如果已安装,您可以使用ob_gzhandler并且内容将被压缩。问题是你没有看到HTTP头Content-Encoding: gzip在响应标题。这个头不是由Web服务器设置,但你可以从PHP设置,通过header()函数的方式:

header('Content-Encoding: gzip'); 

因此,结合这两个步骤中,您有一个解决办法:

if (extension_loaded('zlib') && !ini_get('zlib.output_compression')){ 
    header('Content-Encoding: gzip'); 
    ob_start('ob_gzhandler'); 
} 

我还检查.ini配置。如果zlib.output_compressionOn,所有输出都将被压缩,所以ob_gzhandler是多余的。

此代码是有效的,但它不是什么php sould被用于。压缩输出和设置标题是Web服务器责任。请阅读相关答案,关于configuring .htaccess file,所以Apache会为你做一个压缩和设置正确的响应头。

+0

请详细描述之间,我还不明白! Tnx – Farshad

+0

@Farshad,我添加了更多信息。希望能帮助到你。 – wormi4ok

1

疑难杂症1

ob_start(ob_gzhandler)需要零preoutput。

(断言<?是你的文件的非常第一个字节


疑难杂症2

ob_start(ob_gzhandler)需求zlib.output_compression_level是-1和9

相关问题