【问题标题】:Using ini_set("memory_limit", "-1") and still out of memory使用 ini_set("memory_limit", "-1") 仍然内存不足
【发布时间】:2013-06-15 17:52:30
【问题描述】:

我正在将旧数据库 php 数组处理为新数据库。数据 .php 文件总大小约为 220 MB。

我已经在脚本中插入了这些行,以便它可以正常运行:

ini_set("memory_limit", "-1");
set_time_limit(0);

这是我包含产品的方式:

// The exports made by PHPMYADMIN, exported as PHP-Array
require_once 'export/tx_ttproductsv2_products.php';
require_once 'export/tx_ttproductsv2_keyword.php';
require_once 'export/tx_ttproductsv2_keywords_in_products.php';
require_once 'export/tx_ttproductsv2_typebook.php';
require_once 'export/tx_ttproductsv2_typegospel7.php';
require_once 'export/tx_ttproductsv2_typemedia.php';

当脚本试图要求它们时,我收到此错误:

PHP致命错误:内存不足(分配880541696)(试图分配469762048字节)在......

我有一个在 x64 Win 7 SP1 上运行的本地 EasyPHP 安装。我有 6 GB 内存,Intel i5。

如何让 PHP 运行整个脚本而不会出现内存错误?

【问题讨论】:

  • 尝试增加upload_max_filesize & post_max_size ?
  • @KhawerZeshan,我不上传东西?还是我看错了?
  • PHPMYADMIN 导出的文件是文件还是什么?
  • 您应该更改 php.ini 文件中的 memory_limit。但是,您已经准备好使用 839.75 兆字节。太多了……如果数据库只有 220MB 大,这意味着您的脚本会产生大量开销。尝试一次处理 1 个文件,而不是一次处理所有文件
  • @Mathlight 某些配置不允许您使用 ini_set 覆盖 php.ini 设置。我不熟悉easyPHP或Windows,所以我不确定我的答案是否有效。但是,您仍在使用大量内存,因此不要一次解析所有文件,而是逐个解析它们

标签: php apache memory limit easyphp


【解决方案1】:

内存限制来自操作系统,而不是 PHP 本身。

您的脚本分配了 800MB,并试图再分配 500MB

尝试使用 64 位 PHP 在 64 位操作系统上运行脚本。

【讨论】:

  • 这可能会解决很多问题,但我现在无法对其进行测试(我需要它立即工作)。
  • 最好的解决方案是获取数据并分块处理,而不是全部加载到内存中再处理。
  • 我知道,我已经把它分成了 3 个部分(现在正在编码),这应该可以很好地解决......无论如何感谢您的帮助和想法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2017-09-13
  • 2012-05-31
  • 2023-02-09
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多