我正在编写一个脚本,列出一个目录中的所有图像,然后调整大小并保存在另一个目录中。
在我的共享服务器中,收到此消息:
Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in...
问题是:如果PHP在使用image_destroy()创建每个图像后可以释放内存,为什么保存这些图像的while循环超出了内存限制?
-
代码只保存图像,仅此而已。问题在于图像的数量,而不仅仅是一个巨大的图像。每个图像不超过300KB,脚本停在中间,并没有确切的点。每次执行时,它都会在某些图像中停止。
foreach($images as $image)
{
$img = PhpThumbFactory::create($image);
$img->adaptiveResize(640, 450);
$img->createWatermark(PATH_TEMPLATE_SITE . 'img/watermark.png');
$img->save($dirBig . $id . '.jpg','jpg');
}
此脚本中使用的类是PHPThumb,并且具有析构函数:
public function __destruct ()
{
if (is_resource($this->oldImage))
{
imagedestroy($this->oldImage);
}
if (is_resource($this->workingImage))
{
imagedestroy($this->workingImage);
}
}
我alredy在使用其他脚本保存图像时遇到同样的问题。我认为问题不在于此类或脚本中使用的其他类型的数据。
答案 0 :(得分:0)
问题似乎是水印插件,它获取父类的实例并放入私有成员。我不确切地知道,但删除私有成员并将父类作为参数处理,问题就解决了。
我还在保存了20张图片后添加了刷新。