Я пытаюсь обработать каталог изображений JPEG (примерно 600+, от 50 000 до 500 тыс.), Используя PHP: GD для изменения размера и сохранения изображений, но я ударил немного Захватывают довольно рано в этом процессе. После правильной обработки всего 3 изображений (30K, 18K и 231K) я получаю Допустимый размер памяти 16777216 байт исчерпан PHP Неустранимая ошибка.PHP GD Допустимый размер памяти
Я на велосипеде через образы и вызывая код ниже:
list($w, $h) = getimagesize($src);
if ($w > $it->width) {
$newwidth = $it->width;
$newheight = round(($newwidth * $h)/$w);
} elseif ($w > $it->height) {
$newheight = $it->height;
$newwidth = round(($newheight * $w)/$h);
} else {
$newwidth = $w;
$newheight = $h;
}
// create resize image
$img = imagecreatetruecolor($newwidth, $newheight);
$org = imagecreatefromjpeg($src);
// Resize
imagecopyresized($img, $org, 0, 0, 0, 0, $newwidth, $newheight, $w, $h);
imagedestroy($org);
imagejpeg($img, $dest);
// Free up memory
imagedestroy($img);
Я пытался освободить память с функцией imagedestroy
но это, кажется, не имеют никакого влияния. Сценарий просто постоянно задыхается от строки кода imagecreatefromjpeg
.
Я проверил php.ini, и настройка memory_limit = 16M
кажется, что она держится правильно. Но я не могу понять, почему память заполняется. Не следует ли вернуть память обратно сборщику мусора? Я действительно не хочу увеличивать параметр memory_limit. Это кажется плохим обходным решением, которое потенциально может привести к увеличению количества проблем в будущем.
FYI: Я запускаю свой сценарий из командной строки. Он не должен влиять на функциональность, но может повлиять на ваш ответ, поэтому я подумал, что должен упомянуть об этом.
Может ли кто-нибудь увидеть, если я просто пропустил что-то простое или если здесь есть дефект дизайна? Вы думаете, что это будет довольно простая задача. Конечно, это должно быть возможно, не так ли?
Я попробую. Я предполагаю, что это будет ошибка позже в этом процессе. Надеюсь, я ошибаюсь. – gurun8
Я был неправ. Это сработало. Благодарю. – gurun8
Я предполагаю, что должен был просто написать, что делать, а не зачем делать это. – JYelton