Что делать с ошибкой php – open_basedir restriction in effect ?
Она может возникнуть на любой cms, фреймворке или в самописном коде. Лично у меня проявилась при деплойменте на сервер.
Все дело в том, что у меня на локалке nginx, а на сервере apache2.
Nginx в принципе все равно на эту настройку, он не переопределяет ее в своих конфигах.
Первые шаги обычно поменять в php.ini настройку на
1 2 3 |
open_basedir = none |
Но мне не помогло. Тогда я попробовал поменять уровень вывода ошибок. Тоже не помогло.
Следующий шаг был – проверка прав доступа по проекту. Все было в порядке.
А ошибка была вида:
1 2 3 |
is_file() : open_basedir restriction in effect |
В итоге оказалось, что apache2 в своих конфигах безопасности, а именно /var/www/apache2/conf.d/secure.conf имеет переопределение этой настройки.
1 2 3 4 5 6 7 8 |
< IfModule php5_module > php_admin_value open_basedir "." < /IfModule > < IfModule php4_module > php_admin_value open_basedir "." < /IfModule > |
И желательно ее не убирать вообще. Убрать можно для домена. Сначала я пробовал написать в .htaccess конструкцию вида
1 2 3 4 5 |
<DirectoryMatch "/home/sites/site81/"> php_admin_value open_basedir ".:/var/www/" </DirectoryMatch> |
Но таки это настройка хоста, поэтому получил ошибку. Надо в sites-available в настройках хоста прописать для нужной директории указанную выше настройку. Я прописал в Directory, в той, где указан путь к папке с проектом. Просто дописал перед закрывающим тегом.
1 2 3 4 5 6 7 8 9 10 |
<Directory /var/www/project.ru/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all php_admin_value open_basedir ".:/var/www/" </Directory> |
Заработало. :)