3 回答

TA贡献1847条经验 获得超7个赞
这是我能想到的唯一合理的解释,请检查我的推论是否属实。
您$dataIds不是小整数,而是实际代码中的数十亿。出于某种原因,PHP 似乎$this->end输入为字符串而不是数组。实际上,您正在这样做:
$stuff='string';
$stuff[5000000000]='y'; // will allocate 5 GB of RAM, exceeding your 128M maximum
当你认为你正在这样做时:
$stuff=new Array();
$stuff[5000000000]='y'; // will allocate just a few Bytes since it is an asssociative Array
您将不得不挖掘代码的其他部分,以了解为什么会出现这种情况

TA贡献1860条经验 获得超9个赞
在摸索了一下之后(请参阅从完全不同的切线开始的其他答案),似乎超过 4 GB RAM 的巨大内存分配发生在strtotime
. 目前尚不清楚这是否与 PHP 错误 #53502(一个旧的 PHP 5.3 错误,当前标记为已关闭)有关。
然而,改变
$end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;
至
date_default_timezone_set("UTC"); $end[$id] = ($endDate !== "") ? strtotime($endDate) : $curTime;
摆脱现象,运行平稳。目前尚不清楚是否有任何特定值$endDate
导致了这种情况,或者还有什么可能是促成因素。

TA贡献1836条经验 获得超3个赞
您可能希望将其添加到您的脚本中(放在最上面)
ini_set('memory_limit', '-1');
您可以稍后设置-1
为“256
如果有64
”或“更少”,这还不够。
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报