【问题标题】:Fatal error: Out of memory (allocated 1134559232) (tried to allocate 32768 bytes) in X:\wamp\www\xxx致命错误:X:\wamp\www\xxx 内存不足(已分配 1134559232)(试图分配 32768 字节)
【发布时间】:2014-05-27 19:44:27
【问题描述】:

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

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

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

【问题讨论】:

  • 更改php.ini中的限制后是否重启了apache?
  • 假设您更改了 php.ini 中的memory_limit 设置并重新启动了 apache 服务,您是否确保更新了正确的 php.ini 文件? (有两种,一种用于 HTTP 服务,一种用于命令行界面。)
  • 我检查了 phpinfo(),它显示 memory_limit 设置为 -1,所以看来我已经更新了正确的。我重新启动了apache,仍然没有变化:(
  • 看看这个帖子是否有帮助:stackoverflow.com/questions/4399138/…
  • 但我也遇到了我们在 Hostgator 共享服务器中托管的相同错误,我该如何访问这些文件

标签: php mysql phpmyadmin wampserver


【解决方案1】:

将此行放在代码的开头:

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 中描述的速记符号。

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

【讨论】:

  • 谢谢。增加memory_limit或设置为-1无助于解决问题,
【解决方案2】:

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

【讨论】:

  • 谢谢。增加memory_limit或设置为-1无助于解决问题,
  • 您是否完全看到相同数字的相同错误?如果是这样,那么您的更改有问题。创建一个包含phpinfo(); 的脚本,并查看它对memory_limit 的说明以及您的php.ini 文件的位置。同时重新启动 apache 以获取更改
  • 我检查了 phpinfo() 并显示 memory_limit 设置为 -1 。而且我在错误中没有看到完全相同的数字。我重新启动了apache,仍然没有变化:(
  • 你的 PHP 版本是多少?请参阅@Sharanya-Dutta 的答案中关于需要将其编译到 PHP pre 5.2.1 中的注释
  • 是的,我看到了,我的 PHP 版本是 5.4.16
【解决方案3】:

我终于找到了解决办法。我发现当 PHP 收集垃圾快满时,没有办法释放它。 Unset 和 gc_collect_cycles() 也无效。唯一的方法是在不同的代码部分使用 Function。就我而言,我在 for 循环中有一个大脚本,所以我将所有代码复制到一个函数中,并在我的循环中调用该函数。每次功能安静时,内存都会释放。您可以通过在函数中添加一次memory_get_usage() 来测试它,然后在函数中添加一次以查看差异。

【讨论】:

猜你喜欢
  • 2018-12-03
  • 1970-01-01
  • 2018-01-14
  • 2014-04-04
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多