PHP变量何时自动销毁?
我正在处理上传大的.jpg图像,然后通过变量对其进行操作。在一个地方,我有 $image=imagecreatefromjpeg($\u文件['smileimage']['tmp\u名称'])) 之后,在PHP变量何时自动销毁?,php,variables,Php,Variables,我正在处理上传大的.jpg图像,然后通过变量对其进行操作。在一个地方,我有 $image=imagecreatefromjpeg($\u文件['smileimage']['tmp\u名称'])) 之后,在if的情况下,我必须$image=$newImage
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中,并在某个时候耗尽整个内存??我该怎么办?另外,我想知道变量什么时候会自动销毁???因为您确实使用了$image=$newImage
这两个变量引用同一个图像。不创建任何副本。这两个变量只是引用同一资源的两个不同名称
当您使用imagedestroy($newImage)
释放$newImage
持有的资源时,您正在释放$image
持有的相同资源,因为它们共享该资源
这就是为什么第二次调用imagedestroy
失败的原因,因为映像不再存在
如果您没有手动调用imagedestroy
,PHP会在脚本末尾自动执行此操作。因为您执行了$image=$newImage
这两个变量都引用同一个图像。不创建任何副本。这两个变量只是引用同一资源的两个不同名称
当您使用imagedestroy($newImage)
释放$newImage
持有的资源时,您正在释放$image
持有的相同资源,因为它们共享该资源
这就是为什么第二次调用imagedestroy
失败的原因,因为映像不再存在
如果您没有手动调用imagedestroy
,PHP会在脚本结束时自动执行此操作。很好,谢谢。我还想知道,如果我离开,不销毁$image
&$newImage
,你认为,在某个时候,他们会在某个时候填满RAM吗??或者,一旦会话被销毁,它们就会被销毁??或者在固定的时间间隔内?@Sushil当您的PHP脚本完成执行时,它们会被销毁。它们不会将RAM填充到超过该点的位置。同样,图像也不会根据其文件大小获取原始内存字节(从分辨率/位/像素)。在您不需要资源后立即使用imagedestroy()。从cicada answer中,您可以销毁$image,然后在销毁$newImage//之前对您的变量进行一次var\u dumb,以确保更可靠。谢谢。我还想知道,如果我离开,不销毁$image
&$newImage
,你认为,在某个时候,他们会在某个时候填满RAM吗??或者,一旦会话被销毁,它们就会被销毁??或者在固定的时间间隔内?@Sushil当您的PHP脚本完成执行时,它们会被销毁。它们不会将RAM填充到超过该点的位置。同样,图像也不会根据其文件大小获取原始内存字节(从分辨率/位/像素)。在您不需要资源后立即使用imagedestroy()。从cicada answer中,您可以销毁$image,然后在销毁$newImage//之前对您的变量执行var\u dumb,以确保更可靠