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両方の変数を実行するため、同じ画像を参照します。コピーは作成されません。両方の変数は、同じリソースを参照する2つの異なる名前です。

が保持し$newImageているリソースを解放すると、が保持しているのと同じリソースimagedestroy($newImage)が解放されます。これは、が共有しているためです。$image

imagedestroyこれが、イメージが存在しなくなったために2番目の呼び出しが失敗する理由です。

手動で呼び出さなかった場合imagedestroy、PHPはスクリプトの最後に自動的に呼び出します。

于 2012-05-24T10:52:40.300 に答える