使用 ini_set("memory_limit", "-1") 仍然出现内存不足的情况

32

我正在将一个旧的数据库php数组转移到新的数据库中。数据.php文件总共约有220MB大小。

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

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_filesizepost_max_size 的大小? - Khawer Zeshan
@KhawerZeshan,我不上传东西吗?还是我看错了? - Mathlight
2
你应该在php.ini文件中更改memory_limit。然而,你已经使用了839.75兆字节。那真的很多... 如果数据库只有220MB大小,则意味着你的脚本正在创建大量的开销。尝试一次只处理一个文件,而不是全部文件。 - Pinoniq
@KhawerZeshan,这是一个包含PHP数组列的文件... - Mathlight
1
@Mathlight,有些配置不允许您使用ini_set覆盖php.ini设置。我不熟悉easyPHP或Windows,所以我不确定我的答案是否有效。然而,您仍在使用大量内存,因此请逐个解析文件,而不是一次性解析所有文件。 - Pinoniq
显示剩余3条评论
1个回答

21

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

您的脚本已经分配了800MB的内存,并且正在尝试进一步分配500MB。

建议在64位操作系统上使用64位的PHP来运行脚本。


那可能会解决很多问题,但我现在无法测试它(我需要立即让它工作)。 - Mathlight
7
最佳解决方案是你获取数据并分块处理,而不是将所有数据加载到内存中再进行处理。 - Michal M.
我知道,我已经把它分成了3个部分(正在编码),这应该可以很好地解决...无论如何,感谢您的帮助和想法 ;) - Mathlight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接