如何将gzip内容作为PHP响应发送

21

我的ajax响应非常大,实际上有900KB。因此,我需要进行gzip压缩以提高性能。

请问有谁可以帮助我从我的php中获取被gzip压缩的内容。

先行致谢。


请尝试使用http://php.net/manual/en/function.gzcompress.php。 - Vishnu
3个回答

32

在页面上输出任何内容之前,请加入以下代码:

ob_start("ob_gzhandler");

然后在你的内容后面加上:

ob_end_flush();

您的内容将被压缩


2
正如ra_htial所提到的,最好使用zlib.output_compression而不是ob_gzhandler,因为php.net文档建议使用其中任何一个,此外不要忘记在输出结束时使用ob_end_flush(); - Arthur Kushman
zlib也可以使用,但只要浏览器支持,它就会压缩该站点上的所有请求。虽然在大多数情况下这可能是理想的,但这是一个解决ajax响应大小的问题。 - Chase

16

+1到900Kb对于AJAX来说太大了。虽然它可以工作,但你应该考虑重新思考你的传递机制。 - Dan Hlavenka
是的,现在我已经将其缩小到300kb。然后我再次使用了Chausser的想法,得到了93.7kb的大小。现在它运行得非常好。 - harishkumar329

13

如果在使用ob_gzhandler()之前无法更新php.ini配置文件,您也可以尝试以下方法:

ini_set('zlib.output_compression', 1);

1
这是最佳答案。它不需要检查是否安装了 zlib 扩展。 - alexg
在任何 PHP 文件中使用:ob_start('ob_gzhandler');ob_end_flush(); 只会压缩这个特定的缓冲区/页面,并且它不应影响 PHP 提供的任何其他内容。而在 PHP 文件中使用 ini_set('zlib.output_compression', 1); 或者在 PHP.ini 文件中使用 zlib.output_compression = On,将会对你 PHP 项目中的每个响应都使用这种压缩方式,除非你使用 ini_set('zlib.output_compression', 1); 进行更改。 - Utmost Creator
此外,您可以通过设置 zlib.output_compression_level 来更改压缩级别(比率),指定一个值介于 0无压缩)到 9最大压缩)之间。默认值为 -1让服务器决定使用哪个级别。文档:https://www.php.net/manual/en/zlib.configuration.php#ini.zlib.output-compression-level - Utmost Creator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接