Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php gzinflate:最大空间以避免内存不足?_Php_Gzip_Out Of Memory - Fatal编程技术网

Php gzinflate:最大空间以避免内存不足?

Php gzinflate:最大空间以避免内存不足?,php,gzip,out-of-memory,Php,Gzip,Out Of Memory,当使用gzinflate解压时,我发现-在某些情况下 环境-以下代码导致内存不足错误。在32位Linux(on)上使用PHP5.3.20进行测试 虽然我保守地计算了$maxUncompressedSize的大小,希望给gzinflate足够的内存,但我仍然得到: 致命错误:第123行foo.php中允许的内存大小268435456字节已用完(尝试分配266143484字节) 将$factor的值从0.9更改为0.4时,在这种情况下,错误消失。在其他情况下,0.9正常 我想知道: 错误的原因真的是

当使用
gzinflate
解压时,我发现-在某些情况下 环境-以下代码导致内存不足错误。在32位Linux(on)上使用PHP5.3.20进行测试

虽然我保守地计算了
$maxUncompressedSize
的大小,希望给
gzinflate
足够的内存,但我仍然得到:

致命错误:第123行foo.php中允许的内存大小268435456字节已用完(尝试分配266143484字节)

$factor
的值从
0.9
更改为
0.4
时,在这种情况下,错误消失。在其他情况下,
0.9
正常

我想知道:


错误的原因真的是
gzinflate
需要两倍以上的未压缩数据空间吗?可能还有其他原因吗?
$remaining
真的是应用程序可以使用的剩余内存吗?

这确实是可能的。我想,问题在于
内存使用情况(true)


使用
true
应该给出更高的内存使用值,因为它应该考虑所有因素

首先,什么是这么大的
gzflate()
ing?PHP不是C,你不能期望
gzflate
和PHP只需要未压缩字符串的大小(即使你留了边距)。另外,PHP在内存方面相当松散,这可能是正常的行为。@Pekka I缩减了API的响应,其中一些确实非常大。不幸的是,这超出了我的控制范围。无论如何,未压缩数据的大小并不重要:正如我所解释的,将
$factor
的值从
0.9
调整为
0.4
解决了这个问题。因此,问题不在于未压缩数据的大小,而在于
gzinflate
(临时)在工作时分配的内存大小。@feklee是的,问题不是剩余内存计算错误,而是
gzinflate
使用了比您预期更多的内存。这不是对您问题的回答,但是移动到命令行可能是一种选择吗?内存限制在那里不适用。
$memoryLimit = Misc::bytesFromShorthand(ini_get('memory_limit')); // 256MB
$memoryUsage = memory_get_usage(); // 2MB in actual test case
$remaining = $memoryLimit - $memoryUsage;
$factor = 0.9;
$maxUncompressedSize = max(1, floor($factor * $remaining) - 1000);
$uncompressedData = gzinflate($compressedData, $maxUncompressedSize);