2012-05-24 2 views
0

Я занимаюсь загрузкой большого изображения .jpg, а затем манипулированием им с помощью переменных. В одном месте у меня есть;Когда переменная PHP уничтожается автоматически?

$ IMAGE = imagecreatefromjpeg ($ _ FILES [ 'smileimage'] [ 'tmp_name'])

А потом позже, в 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, если он установлен, он может просто остаться в ОЗУ и съесть всю память в какой-то момент? Что мне делать? А также, я хочу знать, когда переменная автоматически уничтожается?

ответ

3

Поскольку вы делаете $image = $newImage, обе переменные относятся к одинаковым изображения. Копия не создается. Обе переменные - это всего лишь два разных имени, относящихся к одному и тому же ресурсу.

Когда вы освобождаете ресурс, занимаемые $newImage с imagedestroy($newImage) вы освободив ресурс же, что удерживается $image, так как они доля это.

Вот почему второй вызов imagedestroy не удался, потому что изображение больше не существует.

Если вы не вручную вызвали imagedestroy, PHP сделал бы это автоматически в конце скрипта.

+0

Ницца, спасибо. Я также хочу знать, что если я просто уйду и не уничтожу '$ image' и' $ newImage', вы думаете, что в какой-то момент они в какой-то момент пополнят RAM? Или они уничтожаются, как только сессия уничтожается? Или на фиксированный интервал времени? – Sushil

+0

@Sushil Они уничтожаются, когда ваш скрипт PHP заканчивает выполнение. Они не будут заполнять ОЗУ за пределами этой точки. –

+0

Спасибо @Cicada. – Sushil

Смежные вопросы