Создаю новый материал, выбираю путь к картинке... когда нажимаю Сохранить получаю вот такую ошибку:
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
Как исправить?
Комментарии
не хватает памяти. 32МБ это очень мало. добавить в php.ini или, если разрешено, в .htaccess
http://ru.lmgtfy.com/?q=Fatal+error%3A+Allowed+memory+size+of+33554432+b...
v1adimir@drupal.org, спасибо! Поставил 128М и нормально работает. Правда еще не знаю на хостинге прокатит или нет.
Тоже такая проблема и хочется спросить, почему это происходит, если картинка 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, куда эту строку стоит вбивать и, если да, куда точно?
В каком формате картинка авесит 2МБ, JPEG или что-то другое?
И какой размер этой картинки в пикселах?
jpeg, 3648x2736. Я выключил опцию в imageapi, которая сжимает до 70%, там теперь 100 стоит, всеравно не помогает.
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, то там операции идут с вызовом внешних программ и непостредственно с файлами. В этом случае есть вопрос как хостер учитывает расход памяти порождеными процессами...
Спасибо вам огромное за исчерпывающий ответ! Хоть распечатывай и в рамку вешай, на самом деле:)
а какой выход, как избежать подобных ситуаций с нехваткой памяти? ограничивать размер загружаемого файла до 1МБ например или как? какие оптимальные настройки задать так, чтобы конкретная пользователь-бабушка никогда не увидела подобной пугающей фразы "Fatal error: " и т.д.
причем самое обидной что картинка на сервер загружается, скрипты пытаются ее обработать, не могут этого сделать, выдается ошибка, но картинка-то в оригинальном размере на сервере остается, и после 5-6 попыток имеем результат нулевой, а на серваке скопился хлам.