AmiSEO Unix phpMyAdmin и open_basedir restriction
Печать PDF

phpMyAdmin и open_basedir restriction

+ 3
+ 1

Столкнулся тут с проблемой на VPS — после смены режима работы php с fast-cgi на mod_apache перестал запускаться phpMyAdmin. Просто белая страница. Устанавливал его криворукий хостер, поэтому ожидать можно было чего угодно.

Попробовал сначала обновить его командой

yum upgrade phpmyadmin

Обновилось успешно, но не помогло.

Затем я выяснил, что установить phpMyAdmin можно вручную, просто распаковав дистрибутив, к примеру, в /usr/share/ и прописав к нему путь в файле phpMyAdmin.conf, который блаженно разлегся в папке /etc/httpd/conf.d/

Итак, свеженький phpMyAdmin скачан с оффсайта и распакован в указанном месте. Пути прописаны (обратите внимание, что для Unix машины путь phpMyAdmin и phpmyadmin — это два разных путя. Учитывайте регистр букв!) и... результата нет ни болта. Зато теперь не пустой экран, а ошибка

You don't have permission to access /phpmyadmin/ on this server

Ладно, ползем в папку с логами и пялимся в файл error.log и вот что мы там видим (здесь имейте в виду, что смотреть нужно логи того сайта через который вы пытались открыть phpMyAdmin, а не логи апача, к примеру)

[Wed Nov 23 13:07:32 2011] [error] [client 127.0.0.1] PHP Warning:  Unknown: open_basedir restriction in effect. File(/usr/share/phpMyAdmin/index.php) is not within the allowed path(s): (/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin) in Unknown on line 0
[Wed Nov 23 13:07:32 2011] [error] [client 127.0.0.1] PHP Fatal error:  Can't load /usr/share/phpMyAdmin/index.php, open_basedir restriction. in Unknown on line 0

Отсюда становится понятно, что виновата open_basedir restriction. Это ограничение, которое накладывает апач на php, чтобы тот не мог лазить по директориям, которые ему не положены. Обычно прописывается или в php.ini (лежит в папке /etc/ ) или в httpd.conf (лежит в /etc/httpd/conf/ ). Если вы пользуетесь панелью управления, то как правило в файле httpd.conf есть строчка навроди

Include /etc/httpd/conf/sites-enabled/

Она добавляет конфигурации для каждого включенного сайта из папки sites-enabled. Вот там обычно и прописаны настройки директорий для open_basedir restriction в виде php_admin_value open_basedir и дальше список директорий, разделенных двоеточием без пробелов ( : ). Таким образом у нас два пути решения проблемы:

1. Поправить в конфигах путь до phpMyAdmin, если вы хотите иметь уникальное папки для него

2. Сменить имя папки, куда распаковали phpMyAdmin на совпадающее с прописаным в конфигах. Этот вариант более удобен, поскольку панель управления по умолчанию для всех сайтов вписывает именно его.

И еще, после всех изменений не забывайте перезапускать апач командой

service httpd restart