Сегодня после попытки залогиниться на сайт 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.
Если запустить в браузере скрипт с добавленной командой 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. |