PHP变量什么时候自动销毁?

时间:2012-05-24 10:49:29

标签: php variables

我正在处理上传大型.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,如果它被设置,它可能只会持续存在于内存并在某些时候占用整个内存?我该怎么办?而且,我想知道变量何时被自动销毁?

1 个答案:

答案 0 :(得分:3)

由于您$image = $newImage这两个变量都引用了相同的图像。没有创建副本。这两个变量只是两个不同的名称,指的是同一个资源。

当您使用$newImage释放imagedestroy($newImage)所拥有的资源时,您释放$image所拥有的相同资源,因为他们分享它。

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

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