php 无限分类 内存,php内存限制无限但仍然没有内存

博主在运行一个内存需求大的PHP CLI应用时遇到了内存不足的问题,即使在php.ini中设置了memory_limit为-1。系统有超过4GB的可用内存,但程序在尝试分配约1GB内存时失败。通过一段测试脚本,发现内存限制约为1GB。更新到x64版本的PHP后,问题得到解决。这表明可能在32位x86 PHP中存在1GB的内存限制。
摘要由CSDN通过智能技术生成

我有一个需要大量内存的PHP CLI应用程序 . 我在php.ini中将 memory_limit 设置为-1 . 不幸的是我仍然遇到这个问题:

致命错误:内存不足(分配870318080)(试图分配138412032字节)

这时我的系统有超过4 GB的可用内存(我安装了12 GB) . 所以这不是硬件限制 .

我也尝试在代码中设置它:

ini_set('memory_limit','-1');

?>

我也做的是将它设置为2048M,但错误仍然存在 . 它总是大约1GB,那么有任何硬编码的1GB限制吗?

我的系统是什么样的:

Windows 7

PHP 5.6.20(没有Suhosin且没有safe_mode的线程安全32位)

更新:

以下是重现它的脚本:

ini_set("memory_limit", -1);

echo formatSizeUnits(memory_get_usage()).PHP_EOL;

for($i=0;$i<=10; $i++) {

$content[$i] = file_get_contents("http://mirror.softaculous.com/apache/lucene/solr/6.0.0/solr-6.0.0.zip");

echo formatSizeUnits(memory_get_usage()).PHP_EOL;

}

function formatSizeUnits($bytes)

{

if ($bytes >= 1073741824)

{

$bytes = number_format($bytes / 1073741824, 2) . ' GB';

}

elseif ($bytes >= 1048576)

{

$bytes = number_format($bytes / 1048576, 2) . ' MB';

}

elseif ($bytes >= 1024)

{

$bytes = number_format($bytes / 1024, 2) . ' KB';

}

elseif ($bytes > 1)

{

$bytes = $bytes . ' bytes';

}

elseif ($bytes == 1)

{

$bytes = $bytes . ' byte';

}

else

{

$bytes = '0 bytes';

}

return $bytes;

}

?>

我的输出:

php test.php

123.37 KB

164.25 MB

328.37 MB

492.49 MB

PHP Fatal error: Out of memory (allocated 688914432) (tried to allocate 171966464 bytes) in test.php on line 12

Fatal error: Out of memory (allocated 688914432) (tried to allocate 171966464 bytes) in test.php on line 12

更新2:

我安装了x64 PHP 5.6.20 . 现在我能够克服这个限制 . 这是x86 PHP中的官方限制吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值