Неустранимая ошибка при попытке выделить память при создании превью
Я хочу поделиться тем, что случилось со мной по дороге.
Я загрузил изображение на свой веб-сайт и после этого создал несколько больших пальцев. Эти большие пальцы были автоматически обрезаны из относительно больших файлов (изображения размером около 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
ура