Здравствуйте. Я новичок, поэтому прошу прошения за возможное непонимание информации.
После нормальной установки некоторого количества дополнительных модулей при установке последующих модулей стала проявляться ошибка:
Fatal error: Out of memory (allocated 39583744) (tried to allocate 524265 bytes) in xxx/xxx/xxx/includes/menu.inc on line 966
Устанавливаемые модули при этом работают нормально (во всяком случае других ошибок пока не наблюдалось), но Fatal error как-то напрягает.
Попытался решить проблему методами типа:
memory_limit = 32M - редактирование конфигурационного файла php.ini;
ini_set('memory_limit', '32M'); - устанавливает значение опции конфигурации непосредственно в начале "проблемного" скрипта или в файле настроек, в случае с ЦМС;
php_value memory_limit 32M - добавление команды в .htaccess файле всего сайта или в конкретной директории;
ВСЕ БЕСПОЛЕЗНО !
Стал копать глубже, нашел строку 966 в menu.inc, там функция _menu_tree_cid(). Узнал, что эта функция выделяет кэш под дерево данных меню http://api.drupal.org/api/function/_menu_tree_cid/6. Видимо этого выделяемого кэша для чего-то и не хватает.
Что с этим делать, понятия не имею. Пожалуйста, помогите!
Комментарии
а додуматься установить больше 32 М не судьба?
Скорее всего либо менять тариф, либо хостинг.
Я перепробовал разные значения, ставил ini_set('memory_limit', '64M');, а в php.ini даже ставил memory_limit = 1024M!!! ради интереса - результат тот же! Судя по (allocated 39583744)(tried to allocate 524265 bytes) ему больше 41М и не нужно.
После изменений в php.ini memory_limit = 128M посмотрите реально сколько вам выделено в phpinfo()
Если изменения не действуют, значит этот параметр запрещен вам для изменения.
Сейчас в php.ini у меня стоит memory_limit = 256M. Проверил через phpinfo() - memory_limit = 256M. Все нормально!
попробуйте в функции _menu_tree_cid разбить сериализацию и вычисление md5 hash:
<?php
function _menu_tree_cid($menu_name, $data) {
$serializeData = serialize($data);
$md5hash = md5($serializeData);
return 'links:'. $menu_name .':tree-data:'. $md5hash;
}?>
выясните на каком этапе происходит переполнение хипа, чтобы дальше можно было разбирать проблему. Выясните какой модуль при его включении приводит к этой проблеме. Отключите локализацию, если она установлена.
Извиняюсь, я не силен в Drupal. Я так понимаю, что функцию _menu_tree_cid() в файле menu.inc надо заменить на ту, что вы написали:
Но фраза для совершенно непонятна, если не сложно, разъясните как это сделать. Что касается поиска модуля, который приводит к проблеме, то я сейчас этим буду заниматься, последовательно отключая модули.
Обе функции - serialize & md5 - для выполнения алоцируют динамическую память, не мешало бы понять которая из них падает. скорее всего это md5, если не ошибаюсь у нее есть ограничения на длину входного параметра.
bratello - красава!!! Прям Макаренко ёпт