致命错误:X:wampwwwxxx内存不足(已分配1134559232)(试图分配32768字节)


Fatal error: Out of memory (allocated 1134559232) (tried to allocate 32768 bytes) in X:wampwwwxxx

我在个人电脑的本地主机上使用WAMP服务器(32位)。我有一个很大(非常大)的多维数组,它通过读取包含长句的CSV文件(CSV文件包含20000行信息)来获取信息。问题是,当它经过一些计算时,我会得到以下错误:

致命错误:内存不足(已分配1134559232)(试图分配32768字节)在x:''wamp''www''xxx

我尝试了不同的解决方案,比如增加upload_max_filesizepost_max_sizemax_file_uploadsmemory_limit,或者在php.ini中将其设置为-1,或者在我的脚本开始时,也没有人能工作。请帮助我,请不要要求我重新设计代码或更改WAMP的版本,因为某些原因,这是不可能的。非常感谢。:)

终于找到了解决方案。我发现当PHP收集垃圾被填满时,没有办法释放它。Unsetgc_collect_cycles()也不起作用。唯一的方法是在代码的不同部分使用Function。在我的例子中,我在for循环中有一个大脚本,所以我将所有代码复制到一个函数中,并在循环中调用该函数。每次函数安静下来,内存就会释放。您可以通过在函数中添加一次memory_get_usage()和在函数外添加一次来测试它,以查看差异。

这不是这些设置,而是memory_limit,即PHP脚本可以消耗的最大内存量。但是,在任意增加此设置之前,请确保您的服务器有足够的资源。

将这一行放在代码的开头:

ini_set("memory_limit", -1);

PHP手册对memory_limit:进行了以下描述

这设置了允许脚本分配的最大内存量(以字节为单位)。这有助于防止写得不好的脚本占用服务器上的所有可用内存。请注意,要没有内存限制,请将此指令设置为-1。

在PHP 5.2.1之前,为了使用此指令,必须在编译时通过在配置行中使用--enable内存限制来启用它。在5.2.1之前,还需要此编译时标志来定义函数memory_get_usage()和memory_get_peak_usage)。

当使用整数时,该值以字节为单位进行测量。如本常见问题解答中所述,也可以使用速记法。

我不知道是什么让他们如此自信,以至于只有写得不好的脚本需要调整这个设置,但我希望这个简短的介绍无论如何都能满足你的需求。

相关文章: