在PHP中保存图像时内存使用情况如何?

在PHP中保存图像时内存使用情况如何?,php,image-processing,memory-management,Php,Image Processing,Memory Management,我正在编写一个脚本,列出一个目录中的所有图像,然后调整大小并保存到另一个目录中 在我的共享服务器中,我收到以下消息: Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in... 问题是:如果PHP可以在每次使用image_destroy()创建图像后释放内存,为什么保存这些图像的while循环会超出内存限制 -- 代码只保存图像,没有更多。问题在于图像的数量,而不仅仅是一个巨大的图像。每

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

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

Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in...
问题是:如果PHP可以在每次使用image_destroy()创建图像后释放内存,为什么保存这些图像的while循环会超出内存限制

--

代码只保存图像,没有更多。问题在于图像的数量,而不仅仅是一个巨大的图像。每个图像不超过300 kb,脚本停止在中间,没有精确的点。每次执行时,它都会在一些图像中停止

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');
}
此脚本中使用的类为,并具有析构函数:

public function __destruct ()
{
    if (is_resource($this->oldImage))
    {
        imagedestroy($this->oldImage);
    }

    if (is_resource($this->workingImage))
    {
        imagedestroy($this->workingImage);
    }
}

我总是有同样的问题保存图像与其他脚本。我认为问题不在于这个类或脚本中使用的其他类型的数据。

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


在保存了20幅图像后,我还添加了一个刷新。

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


保存20张图像后,我还添加了一个刷新。

发布您的代码
image\u destroy
仅释放与图像内部表示相关的内存。如果您存储了其他信息,它可能不会被发布。。。此外,图像使用了相当多的内存。。。你确定你没有加载任何巨大的图像吗?你能告诉我们你正在使用的代码吗?“在PHP中内存使用是如何工作的?”糟糕:请现在查看详细信息@meagar我已经编辑过了,如果你有一个更优雅的标题,请编辑。我会在foreachloop中添加一个unset($img),通常使用unset会降低代码的内存
image\u destroy
仅释放与图像内部表示相关的内存。如果您存储了其他信息,它可能不会被发布。。。此外,图像使用了相当多的内存。。。你确定你没有加载任何巨大的图像吗?你能告诉我们你正在使用的代码吗?“在PHP中内存使用是如何工作的?”糟糕:请现在查看详细信息@meagar我已经编辑过,如果你有一个更优雅的标题,请编辑。我会在foreachloop中添加一个unset($img),通常使用unset会降低内存