Неустранимая ошибка при попытке выделить память при создании превью

Я хочу поделиться тем, что случилось со мной по дороге.

Я загрузил изображение на свой веб-сайт и после этого создал несколько больших пальцев. Эти большие пальцы были автоматически обрезаны из относительно больших файлов (изображения размером около 5 Мб в формате JPEG), и я делал это много раз. Внезапно при загрузке большого файла и создании большого пальца из обрезанного изображения (не оригинала) я обнаружил эту ошибку:

Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 22464 bytes)

Как я мог исчерпать 128 МБ памяти?

2 ответа

Решение

Основная проблема заключалась в том, что я использовал больше памяти, чем доступно. Первое, что нужно было проверить, было, конечно, загружал ли я правильный файл, а не слишком большой. Хорошо, 3 Мб. Тогда в чем была проблема?

Обычно ошибки такого рода сопровождаются точной строкой, в которой они полностью истощают вашу доступную память. В моем случае, был внутри этого:

$orig = imagecreatefromjpeg($fullPathFilename);

Итак, произошел сбой сервера при выделении нового образа в память. А потом мне пришло в голову: я не освободил ни один из предыдущих вызовов распределения! Как упомянуто выше, я получал много больших пальцев из изображений разных размеров. И глупый я, я не освободил ни одного из них. Так что, если вы видите эту ошибку при обрезке / изменении размера / изменении нескольких изображений, проверьте этот вызов внутри вашего кода:

imagedestroy($orig);

Итак, подведем итоги.

Если вы не найдете imagedestroy() функции, то вы, возможно, нашли свою проблему!

Я также столкнулся с этой проблемой

Увеличьте следующие переменные, чтобы выполнение вашей страницы не прекращалось:

max_input_time
memory_limit
max_execution_time

ура

Другие вопросы по тегам