0

我正在上传大型 .jpg 图像,然后通过变量对其进行操作。在一个地方,我有;

$image = imagecreatefromjpeg($_FILES['smileimage']['tmp_name'])

然后稍后,在某种if情况下,我必须$image = $newImage;在做一些工作之后,我希望变量被销毁,我想如果我不销毁它们,它们可能会继续吃 RAM。所以我做了如下:

if(isset($newImage)) {
    imagedestroy($newImage);
}
imagedestroy($image);
imagedestroy($thumbnail);

但这提供了一个错误,因为

警告:imagedestroy(): 11 在...中不是有效的图像资源

它告诉 erros 符合imagedestroy($image). 但是$image是一个有效的image资源。是不是如果我销毁$newImage$image也会自动销毁?

但是,如果我删除上面写着的那一行;

if(isset($newImage)) {
    imagedestroy($newImage);
}

那么,就没有错误了。但我担心,如果我不销毁$newImage它,它可能会在 RAM 上持续存在并在某个时候吃掉整个内存?我该怎么办?而且,我想知道变量什么时候自动销毁??

4

1 回答 1

3

因为你做$image = $newImage了两个变量都引用同一个图像。不创建副本。这两个变量只是引用同一资源的两个不同名称。

当您释放与您一起持有的资源时$newImageimagedestroy($newImage)您正在释放由 持有的相同资源$image,因为它们共享它。

这就是第二次调用imagedestroy失败的原因,因为图像不再存在。

如果您没有手动调用imagedestroy,PHP 会在脚本结束时自动完成。

于 2012-05-24T10:52:40.300 回答