PHP内存耗尽即使我确定我有更多

时间:2014-09-15 13:06:23

标签: php apache codeigniter

我自己编写的精美脚本开始出错:

PHP致命错误:允许的内存大小为12582912字节耗尽(尝试分配78个字节)

并且我非常确定我的内存限制不是12 MB。这也与脚本无关,因为我知道我可以在我的localhost上运行它。 Codeigniter Profiler说,它需要17MB的内存。

那么可能是什么原因造成的?为什么我的服务器认为它有12MB​​的内存限制......

3 个答案:

答案 0 :(得分:1)

您可以尝试使用ini_set(' memory_limit',' 2048M');在你的PHP代码中。

不建议将它设置得那么高,但是一旦找到真正的原因,你可以稍后降低它。

http://php.net/manual/en/function.ini-set.php

然后,您可以使用此函数:memory_get_usage()来检查应用程序在特定行使用的内存量。用它来查找泄漏所在的特定行。

http://php.net/manual/en/function.memory-get-usage.php

答案 1 :(得分:0)

你可以增加这样的记忆:

 ini_set('memory_limit','256M');

答案 2 :(得分:0)

仅仅因为你的服务器有更多的内存并不意味着它会或者应该将它全部分配给一个特别贪婪的脚本系统(否则一个编码错误可能会破坏系统的所有资源)。 因此,PHP对其允许的数量施加了自己的限制。如果修改htaccess文件,请添加:

 php_value memory_limit 20M

应该允许它占用高达20Mb。显然,您可以使用它来查看您需要多少(尝试先降低它并查看该错误情况下的数字是否发生变化)。

您可以在PHP.net site

找到有关memory_limit的更多信息

请注意,您应该尝试减少脚本所需的内存量(因为服务器上的其他系统现在会减少),但此解决方案至少可以帮助您实现目标。

正如其他人所说,你也可以使用ini_set在该特定脚本的开头设置相同的变量,然后它将在运行结束时恢复为标准。但请注意(由于显而易见的原因),某些服务器不允许其脚本只是说“我需要所有资源用于我的Srz Bzns”并使服务器的其余部分饿死。