Joomla: ошибка при выделении памяти скриптом PHP Печать
Добавил(а) microsin   

Сегодня после попытки залогиниться на сайт Joomla 1.5 наткнулся на ошибку "Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 11 bytes) in / var/ www / имя_пользователя /data / www / имя_домена.ru / libraries / joomla / database / database / mysql.php on line 462". Причем для анонимного доступа сайт работал нормально - если зайти браузером с другого IP-адреса.

Ответ нашел на сайте joomlaforum.ru [1]:

Эта ошибка означает, что ваш скрипт PHP (а в контексте Joomla это или сама система или один из ее элементов) для выполнения требует памяти больше, чем разрешено в настройках PHP. Т.е. запрашиваемое значение превышает максимальное количество оперативной памяти предоставляемого пользовательскому аккаунту виртуальным хостингом. На разных хостингах это значение может отличаться. Чаще всего данная ошибка возникает в файле /includes/domit/xml_domit_parser.php при обработке xml-файлов (например при просмотре списка компонентов, модулей или мамботов. Если у вас возникает такая проблема, то можно сделать следующее:

1. Попробовать самостоятельно изменить это значение, добавив в самое начала index.php (расположенного в корне сайта) следующие строчки:

< ?php ini_set("memory_limit", "32M"); ? >

или же положив в корень сайта файл .htaccess следующего содержания:

php_value memory_limit 32M

Если же такой файл уже есть в корне сайта — просто добавьте в него приведенную выше строку.

2. Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.

3. Для Joomla 1.5 существует плагин Memory Limit Plugin, который позволяет увеличить лимит без правки кода.

[Исправление ошибки]

Лично мне совет с правкой .htaccess не помог, помогло добавление кода в index.php:

< ?php ini_set("memory_limit", "200M"); ? >

Изменение вступит в силу немедленно, не потребуется ни перезагрузка сервера, ни демона Apache.

[php.ini]

Можно также изменить настройки php.ini [2]. Размещение этого файла зависит от типа Вашего хостинга. Если это выделенный сервер на RedHat или аналогичной системе Linux, то файл php.ini обычно находится в каталоге php-bin относительно домашнего каталога пользователя, от имени которого запускается сервер Apache, например в каталоге /var/www/apacheuser/data/php-bin. Для поиска файла php.ini можно воспользоваться командой find:

myserver:/# find / -name php.ini
/var/www/apacheuser/data/php-bin/php.ini
/etc/php5/cgi/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini

После того, как файл php.ini найден, можно в текстовом редакторе его изменить, и задать новый допустимый размер выделяемой памяти для скриптов PHP. В моем файле php.ini не была указана команда для задания лимита, и по умолчанию действовал лимит 128 мегабайт. Я изменил лимит на 200 мегабайт, добавив в php.ini команду:

memory_limit = 200M

Изменение вступит в силу немедленно, не потребуется ни перезагрузка сервера, ни демона Apache. Для проверки текущего лимита PHP на выделение памяти можно воспользоваться командой phpinfo [3], добавленной в скрипт PHP.

< ?php
phpinfo();
? >

Если запустить в браузере скрипт с добавленной командой phpinfo, то текущие параметры PHP отобразятся в виде таблицы. Строка с параметром memory_limit покажет текущее значение лимита памяти.

max_input_nesting_level 64 64
max_input_time -1 -1
memory_limit 200M 200M
open_basedir no value no value
output_buffering 0 0

[Ссылки]

1Что означает "Fatal error: Allowed memory size of 16777216 bytes exhausted..." site:joomlaforum.ru.
2. Описание встроенных директив php.ini site:php.net.
3Простейшие примеры скриптов на PHP.