php开启gzip后返回大数据时内存溢出问题解决

首先,常见的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,这时候第一第二种出现了内存溢出问题。后来改用第三种,问题解决。

不过网上说第三种性能是比较差的,因为上面两种是对网页内容压缩的同时发送数据至客户端,第三种是对网页内容压缩的同时发送数据至客户端。

  • 发表评论
当前用户:
  • 评论列表