致命错误:在X:\ wamp \ www \ xxx中内存不足(分配1134559232)(试图分配32768字节)

时间:2014-04-14 00:21:50

标签: php mysql phpmyadmin wampserver

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

  

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

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

3 个答案:

答案 0 :(得分:2)

最后我找到了解决方案。我发现当PHP集合垃圾变满时,没有办法释放它。 Unsetgc_collect_cycles()也无效。唯一的方法是在代码的不同部分使用 Function 。在我的情况下,我在for循环中有一个大脚本,所以我将所有代码复制到一个函数中,并在我的循环中调用该函数。每次功能静止,内存都可以释放。您可以通过在函数中添加memory_get_usage()一次以及在函数外部添加一次来测试它。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

将此行放在代码的开头:

ini_set("memory_limit", -1);

PHP手册提供了memory_limit的以下描述:

  

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

     

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

     

使用integer时,以字节为单位测量值。也可以使用this FAQ中描述的速记符号。

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