【发布时间】:2015-02-12 23:50:16
【问题描述】:
考虑以下简单的 PHP 脚本:
<?php
print memory_get_usage()."<br />";
print ini_get("memory_limit")."<br />";
$file = imagecreatefromjpeg("image.jpg");
?>
输出如下:
109848
120M
Fatal error: Out of memory (allocated 63700992) (tried to allocate 23040 bytes) in /homepages/13/d444038670/htdocs/bilderarchiv/test.php on line 4
我尝试阅读的图片是一张大图。但是,第二行声明 memory_limit 为 120 MB,但脚本在分配大约 64 MB 时终止。怎么会这样?该脚本在另一个提供程序上完美运行,尽管 memory_limit 也是 120M。
【问题讨论】:
-
图片的尺寸和颜色模式是多少? JPEG 图片在加载时会“解压缩”。而且它们在内存中需要的字节数比在硬盘上的多。
-
尺寸为 5760 x 3240,24 位 sRGB。
-
跟踪真实内存使用情况:
memory_get_usage(true)— 参见docs 和this question。 -
实际内存使用量为 262144。只有几千字节,这并不奇怪,因为它是文件中的第一条语句。然而,特殊之处在于 PHP 在大约 64MB 时死掉了,尽管内存限制为 120MB。就是这个问题。
标签: php out-of-memory gd