首先,常见的PHP开启GZIP功能方法有三种。
第一种
php.ini文件中配置:
zlib.output_compression = On zlib.output_compression_level = 6
其中output_compression_level可选值为1-9,压缩率从低到高排,当然性能也是越高越差。
第二种
使用虚拟主机无法编辑php.ini的用户,可以使用php代码来实现。
if(!headers_sent() && extension_loaded('zlib') && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip')) { ini_set('zlib.output_compression', 'On'); ini_set('zlib.output_compression_level', 6); }
第三种
// 开头执行 if(!headers_sent() && extension_loaded('zlib') && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip')) { ob_start('ob_gzhandler'); } // TODO: 中间像平常一样处理 // 最后执行 ob_end_flush();
我在开发一个接口时候,返回数据20多MB,这时候第一第二种出现了内存溢出问题。后来改用第三种,问题解决。
不过网上说第三种性能是比较差的,因为上面两种是对网页内容压缩的同时发送数据至客户端,第三种是对网页内容压缩的同时发送数据至客户端。