Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP变量何时自动销毁?_Php_Variables - Fatal编程技术网

PHP变量何时自动销毁?

PHP变量何时自动销毁?,php,variables,Php,Variables,我正在处理上传大的.jpg图像,然后通过变量对其进行操作。在一个地方,我有 $image=imagecreatefromjpeg($\u文件['smileimage']['tmp\u名称'])) 之后,在if的情况下,我必须$image=$newImage

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

$image=imagecreatefromjpeg($\u文件['smileimage']['tmp\u名称']))

之后,在
if
的情况下,我必须
$image=$newImage
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,以确保更可靠