我正在处理上传大型.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
,如果它被设置,它可能只会持续存在于内存并在某些时候占用整个内存?我该怎么办?而且,我想知道变量何时被自动销毁?
答案 0 :(得分:3)
由于您$image = $newImage
这两个变量都引用了相同的图像。没有创建副本。这两个变量只是两个不同的名称,指的是同一个资源。
当您使用$newImage
释放imagedestroy($newImage)
所拥有的资源时,您释放$image
所拥有的相同资源,因为他们分享它。
这就是对imagedestroy
的第二次调用失败的原因,因为图像不再存在。
如果你没有手动调用imagedestroy
,那么PHP会在脚本结束时自动完成。