月下博客

gzdecode(): insufficient memory

使用百度统计提供的DataAPI获取站点数据,运行提供的示例代码出现: gzdecode(): insufficient memory 这个问题,导致不能正常登陆。

从字面上理解,产生的原因是调用这个方法时耗费了大量的内存以至于内存不足。在php.ini里把内存加大,重启httpd问题依旧。接着从官网 http://php.net 查看该函数的API,调用方法也正确。不过注意到该方法的第二个参数是可选的,于是尝试去掉第二个参数。果然,去掉第二个参数后问题解决了。

采用的php版本是5.5.14,demo上运行通过的版本是5.2.x,猜测原因是返回字符串有额外字符引起。gdecode第二个参数告诉了需要被解压出来的字符串的长度,使用strlen函数获取到的可能不是压缩前的长度,从而导致了问题的发生。去掉第二个参数采用默认处理方式,估计能更好的将所有的数据解压出来。

示例代码中另外一个warn则是 curl_setopt导致。由于版本不同,CURLOPT_SSL_VERIFYHOST配套的值在新版本的curl库中为2,1已经被弃用。将值更改过来则可以解决这个警告了。