[РЕШЕНО] Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3264 bytes) in imageapi_gd.module

Главные вкладки

Аватар пользователя Mindzor Mindzor 14 августа 2011 в 16:43

Создаю новый материал, выбираю путь к картинке... когда нажимаю Сохранить получаю вот такую ошибку:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3264 bytes) in C:\xampp\htdocs\*\sites\all\modules\imageapi\imageapi_gd.module on line 59
Как исправить?

Комментарии

Аватар пользователя 2red 2red 13 сентября 2011 в 15:42

Тоже такая проблема и хочется спросить, почему это происходит, если картинка 2 мб весит? Т.е. скрипту нужно в несколько десятков раз больше, что бы обработать эту операцию?

У меня вот:

PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 14592 bytes) in /home/u42883/vivarilla.ru/www/sites/all/modules/imageapi/imageapi_gd.module on line 59

У хостера(вроде) 32мб ограничение.

Еще хотел узнать, есть ли конкретный файл .htaccess, куда эту строку стоит вбивать и, если да, куда точно?

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 13 сентября 2011 в 17:19

"2red" wrote:
Тоже такая проблема и хочется спросить, почему это происходит, если картинка 2 мб весит? Т.е. скрипту нужно в несколько десятков раз больше, что бы обработать эту операцию?

В каком формате картинка авесит 2МБ, JPEG или что-то другое?
И какой размер этой картинки в пикселах?

Аватар пользователя 2red 2red 14 сентября 2011 в 10:14

jpeg, 3648x2736. Я выключил опцию в imageapi, которая сжимает до 70%, там теперь 100 стоит, всеравно не помогает.

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 14 сентября 2011 в 11:22

JPEG -- формат с хитрой компрессией, 70% или 100% не имеет отношения к весу файла -- это, условно говоря, коэффициенты в преобразование Фурье, используемом для компрессии.

Вернемся к нашему файлу. Imagecache обрабатывает может работать только с реальными нескомпрессированными данными. Посчитаем сколько они весят. Картинка состоит из 3648*2736 = 9,980,928 пикселов. Каждый пиксел кодируется 3-мя цветовыми каналами. Для кодирования одного пиксела в одном цветовом канале требуется 1 байт.

То есть результирующий размер данных для картинки 3648х2736 получается 9,980,928*3 = 29,942,784. То есть примерно 28,5 МБ, в 10 раз больше чем исходный jpg-файл.

А еще нужна память для выполнения вычислений и для результирующего изображения. Поэтому 32МБ гарантированно не хватит.

Это при условии, что обработка идет через php-gd2. Если используется imagemagick, то там операции идут с вызовом внешних программ и непостредственно с файлами. В этом случае есть вопрос как хостер учитывает расход памяти порождеными процессами...

Аватар пользователя 2red 2red 14 сентября 2011 в 13:06

Спасибо вам огромное за исчерпывающий ответ! Хоть распечатывай и в рамку вешай, на самом деле:)

Аватар пользователя Enxiro Enxiro 16 декабря 2011 в 8:11

а какой выход, как избежать подобных ситуаций с нехваткой памяти? ограничивать размер загружаемого файла до 1МБ например или как? какие оптимальные настройки задать так, чтобы конкретная пользователь-бабушка никогда не увидела подобной пугающей фразы "Fatal error: " и т.д.
причем самое обидной что картинка на сервер загружается, скрипты пытаются ее обработать, не могут этого сделать, выдается ошибка, но картинка-то в оригинальном размере на сервере остается, и после 5-6 попыток имеем результат нулевой, а на серваке скопился хлам.