Ошибка Allowed memory при приёме изображений в base64?

Скрипт принимает json с массивом из 150-200 base64 картинок размером 700х700px image/png
Потом собирает их в mp4. Заметил что в логах изредка появляются записи:
PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 450560 bytes)

указывая на строку, где переменная с post (где передаются 150-200 картинок) конвертируется при помощи json_decode
Как это понять? Пишет что не хватает памяти в 256мб пытаясь выделить 440кб, как так?
200 картинок даже в base64 не весят так много, чтобы сожрать всю память.
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
l3ftoverz
@l3ftoverz Куратор тега PHP
Люблю Финский металкор
Ваш вариант с FormData - очень хороший! Во-первых, base64 всегда увеличивает исходный размер кодируемых данных, во-вторых, что бы распарсить JSON его нужно полностью загрузить в память, т.е. у тебя и строка пришедшая вся в памяти и итоговый объект JSON - тоже в памяти.

Сделать нормальную POST загрузку пачкой файлов, чтобы не держать все картинки в памяти, а в tmp директории - хорошее решение, которое не будет бить по памяти и траффику, что бы отправить base64. Причём это касается и клиента и сервера. Ну и видеале бы сделать очередь обработки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Значит что ваши 256Mb забиты настолько, что выделить из них ещё 440Kb невозможно.
Ответ написан
@CyclusVitalis
А давайте посчитаем сколько примерно весят ваши 200 картинок:
200 (картинок) 
* 700 (точек) 
* 700 (точек) 
* 24 (бита на точку) 
/ 8 (бит) 
/ 1024 (байта) 
/ 1024 (байта) 

= 280,38 (мегабайт)


Все нормально, в 256 мегабайт помещается :P
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы