保存图像时,内存使用在PHP中如何工作?

时间:2010-08-18 14:51:34

标签: php image-processing memory-management

我正在编写一个脚本,列出一个目录中的所有图像,然后调整大小并保存在另一个目录中。

在我的共享服务器中,收到此消息:

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在使用其他脚本保存图像时遇到同样的问题。我认为问题不在于此类或脚本中使用的其他类型的数据。

1 个答案:

答案 0 :(得分:0)

问题似乎是水印插件,它获取父类的实例并放入私有成员。我不确切地知道,但删除私有成员并将父类作为参数处理,问题就解决了。

我还在保存了20张图片后添加了刷新。