【发布时间】:2016-04-01 06:50:23
【问题描述】:
我有一个 PHP 脚本,用于调整用户 FTP 文件夹中的图像大小,以便在他的网站上使用。
虽然调整大小很慢,但脚本已正确完成过去所有图像。然而,最近,用户上传了一张 21 兆像素 JPEG 图像的相册,正如我所发现的,该脚本无法转换图像,但没有给出任何 PHP 错误。当我查阅各种日志时,我发现多个 Apache 进程因内存不足错误而被终止。
PHP 脚本的功能部分本质上是一个 for 循环,它遍历我在磁盘上的图像并调用一个方法来检查缩略图是否存在,然后执行以下操作:
$image = new Imagick();
$image->readImage($target);
$image->thumbnailImage(1000, 0);
$image->writeImage(realpath($basedir)."/".rescale."/".$filename);
$image->clear();
$image->destroy();
服务器有 512MB 的 RAM,通常至少有 360MB 以上的空闲空间。
PHP 的内存限制目前设置为 96MB,但我之前已将其设置得更高,但对问题没有任何影响。
根据我的估计,一张 21 兆像素的图像在未压缩时应该占据 80MB+ 的区域,所以我很困惑为什么除非没有从内存中删除 Image Magick 对象,否则 RAM 会如此迅速地消失。
有什么方法可以优化我的脚本以更有效地使用更少的内存或垃圾收集?
我是不是没有内存来处理这么大的图像?
干杯
【问题讨论】:
-
尝试只使用 'convert' 命令行工具,它应该会更快,并且不会计入 PHP 的内存限制。
标签: imagemagick