【发布时间】:2011-05-22 21:33:32
【问题描述】:
我在运行我的 PHP 脚本时遇到错误......
Fatal error: Out of memory (allocated 1827405824) (tried to allocate 88800 bytes)
我已将此行添加到我的 PHP 脚本中..
ini_set("memory_limit","3000M");
此语句似乎确实可以正确控制内存使用量,但我似乎无法将其提高到大约 1.8GB 以上。 好像内存上限在其他地方受到限制。 我也添加到了 php.ini...
memory_limit = 3000M
有谁知道内存是否在其他地方受到限制?
我正在使用 Xampp 运行本地服务器。 我有 4GB RAM 的 64 位 Windows 7。 我的脚本使用 PHP 的 GD 图像库,尝试使用 ImageCreateTrueColor() 分配图像引用时出现错误。
(我知道这是一个巨大的内存量 - 但这只是一个脚本,而且这样做更容易。)
谢谢。
更新....
@elusive @Orbling 我希望每个人都对这个问题感到厌烦,但这里是说明问题的简化代码。
<?php
ini_set("memory_limit","4000000000");
echo "ini_get = " . ini_get('memory_limit') . "<br>\n";
echo "memory_get_usage = " . memory_get_usage(true) . "<br>\n";
$bigImageHandle = imagecreatetruecolor(22200, 24800); //this is line 5
?>
浏览器输出...
ini_get = 4000000000
memory_get_usage = 524288
Fatal error: Out of memory (allocated 1843396608) (tried to allocate 88800 bytes) in
E:\User\My_Webs\experiments\houseshunting\temp\osMaps\t1.php on line 5
我用一组较小的图块和 imagecreatetruecolor() 使用的内存对此进行了测试,我估计我需要 2.7GB
【问题讨论】:
-
您确定同时需要如此大量的数据吗?您是从数千张其他图片中合成一张图片吗?
-
我同意难以捉摸。几乎可以肯定你做错了什么需要这么多内存。
-
我正在用许多小图像制作大图像。为此,我需要分配一个大的图像参考 - 这导致了问题。或者您是否建议有一种方法可以将许多图像组合在一起而不需要大量内存?
-
@spiderplant0:AFAIK,GD 将其中一个小图像的内容复制到您的大图像上。复制后,您应该能够释放小图像的内存。您可以一次执行一个图像并减少同时使用的整体内存。大图像本身没有问题,因为它只有大约 88KB 的内存。问题是(显然)大量同时在内存中的小图像。
-
难以捉摸,我的代码结构是:(1)将所有小图像的文件名读入一个数组。 (2) 计算大图的大小并创建大图(imagecreatetruecolor)。 (3)依次打开每个小图,合并成大图(imagecopymerge)。第 1 步之后的内存使用量只有 1048576 字节。我在创建大图像期间出现内存错误 - 即在打开任何小图像之前
标签: php apache memory-limit