Я создаю миниатюры, едущие по множеству изображений, когда я нахожу большое изображение, которое я получаю:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 13056 bytes)
Теперь я уже знаю, как обойти это с помощью:
ini_set('memory_limit', '-1');
Я хочу знать, почему он исчерпывает память! Есть ли какие-то инструменты отладки, которые покажут мне, когда память исчерпает себя? И конкретно это покажет мне, есть ли переменные / массивы, которые убивают мою память?
ИЛИ, есть ли лучший способ изменить размер изображений другим:
$thumb=imagecreatetruecolor($newwidth,$newheight); $source=imagecreatefromjpeg($imgfile); imagecopyresampled($thumb,$source,0,0,0,0,$newwidth,$newheight,$width,$height); imagejpeg($thumb,$destinationfile,85);
?
Большое спасибо!
Есть ли какие-то инструменты отладки, которые покажут мне, когда память исчерпает себя?
Вы можете использовать memory_get_usage и memory_get_peak_usage
И конкретно это покажет мне, есть ли переменные / массивы, которые убивают мою память?
Иногда переменные – это просто владельцы ресурсов, которые, по сути, указывают на структуры данных, которые могут быть созданы на других языках. PHP не может их измерить. Просто используйте функции использования памяти после подозрительных строк в коде, чтобы сузить виновника.
Некоторые настройки (например, общий хостинг) ограничивают возможность изменения требований к памяти. Эти ограничения могут быть реализованы на уровне PHP, веб-сервера и / или ОС. Вы хотите, чтобы ваш запрос memory_limit был успешным, вызвав phpinfo ().
Возможно, вам придется вызвать imagedestroy()
после завершения каждого изображения (например, $source
и $thumb
), особенно если вы обрабатываете множество изображений. Я не уверен, что сборка мусора PHP очистит ресурсы изображения GD.