Разрешенный размер памяти 33554432 байта исчерпан (пытался выделить 19456 байт)
Указывает, что вы пытаетесь выделить больше 33554432 байт, которые вам разрешено использовать; т.е. 32 МБ:
; 33554432/1024/1024
32
Это указывает на то, что неудачное выделение произошло, когда PHP попытался выделить 19 Кбайт; но уже было выделено почти 32 МБ -- эти выделения не были неудачными, так как их общий объем был меньше 32 МБ.
Часть "19456 байт" сообщения об ошибке не имеет значения: важно то, что ваш memory_limit установлен на 32 МБ.
Учитывая, что memory_limit является своего рода защитой, было бы странно, если бы ваш хостинг-провайдер позволил вам изменить его значение...
Если вы находитесь на виртуальном хостинге, это будет означать, что любой на сервере может получить любое количество памяти, которое он хочет... Что было бы не очень хорошо для других пользователей на том же сервере!
Кстати: 32 МБ на самом деле вполне разумное значение - я никогда не видел сервер, настроенный на разрешение более 32 МБ для веб-приложения... И значение по умолчанию для PHP 5.2, похоже, составляет 16 МБ, согласно руководство. (Я работаю с Drupal уже пару месяцев)
По поводу ошибки 500 у меня мало идей... Возможно, что safe_mode активирован и не позволяет устанавливать memory_limit во время выполнения.
В руководстве об этом особо не говорится, но есть немного информации в разделе max_execution_time:
Вы не можете изменить этот параметр с помощью ini_set() при работе в безопасном режиме. Единственный обходной путь - отключить безопасный режим или изменить ограничение по времени в php.ini.
Я полагаю, то же самое относится и к memory_limit ; во всяком случае, это выглядело бы логично.
Ответ 2 · рейтинг 1 · jergason
Поместите его в свой файл php.ini. Попросите хост перезапустить Apache. Этот узел на drupal.org расскажет вам, как это сделать. Если у вас виртуальный хостинг, на drupal.org есть пошаговые инструкции по изменению вашего php.ini для большинства наиболее популярных провайдеров. Просто найдите "PROVIDER_NAME увеличить лимит памяти".
Ответ 3 · рейтинг 1 · Beyerz
Вам нужно уточнить у вашей хостинговой компании, сколько памяти они вам выделили, так как только они смогут ее изменить, если они не увеличат ее, тогда я предлагаю искать новую хостинговую компанию.
Однако, когда дело доходит до друпала, вы были правы, добавив
ini_set('memory_limit', 'xxxM');
в файл settings.php. (xxx = требуемая память)
В Drupal есть много отказоустойчивых систем, это одна из них, и Drupal не дает вам исчерпать память.
Так что уточните у хостинговой компании, увеличьте его и установите свой memory_limit в файле settings.php.
Обычно я просто добавляю эту строку в самый низ скрипта, но вы можете добавить ее где угодно.
Прочитайте это для других людей, у которых была похожая проблема и было множество способов решить ее в drupal.
Если вы устанавливаете memory_limit и получаете меньше ошибок памяти, чем максимум, один из виновников лежит на вышестоящей системе, порождающей ваш процесс: Apache.
В конфигурации Apache (/usr/local/apache/conf/httpd.conf) вы найдете директиву, устанавливающую верхний предел для всех дочерних процессов, обрабатывающих запросы (и Drupal работает в таких процессах). Данный сервер Apache может обслуживать несколько клиентов (вы и некоторое количество других). Если бы они позволили одному клиенту занять всю память, у всех остальных был бы BadTime(tm). Чтобы избежать такой ситуации, они ограничивают объем памяти, который может иметь каждый такой процесс.
Например:
# rlimits, do not modify
# Setting single-process size
#RLimitMEM 85643200 104857600
RLimitMEM 134217728 537395200
Здесь я закомментировал исходные значения, установленные моей службой хостинга, и увеличил их.
Конечно, если вы находитесь на общем сервере, то маловероятно, что вы сможете изменить эту конфигурацию. Фактически, это, вероятно, конфигурация, которую изменил бы ваш хост-провайдер.
FWIW, Host Gator, похоже, дает вам ~ 80 МБ на процесс. Среда выполнения PHP занимает ~ 16 МБ.
Ответ 5 · Simon Groenewolt
Спросите у своего провайдера, почему он не работает. Я предполагаю, что они ограничили объем памяти, который вы можете использовать, и не позволяют устанавливать его выше, или вы работаете внутри виртуального хоста, у которого просто нет запрашиваемого вами объема памяти (это может быть причиной ошибка 500).
Ответ 6 · Amber
Многие провайдеры виртуального хостинга не позволят вам увеличить лимит памяти PHP, так как они не хотят, чтобы один сайт в общем ящике занимал память других сайтов на той же машине. Я бы порекомендовал прочитать часто задаваемые вопросы вашего хостинг-провайдера и многое другое, касающееся PHP, там могут быть перечислены любые такие ограничения.
Меньшее число - это просто размер запроса, из-за которого общая выделенная сумма превысила лимит, а не фактическая сумма по всем запросам на выделение. Таким образом, если уже было выделено 33540000 байт и был запрошен другой объект размером 19456, вы получите это сообщение.