понедельник, 29 сентября 2014 г.

Ошибка: Warning: require() [function.require]: open_basedir restriction in effect

При деплое простенького форума на php на бесплатном хостинге hostinger.ru столкнулся с ошибкой:
Warning: require() [function.require]: open_basedir restriction in effect. File(/home/u723559755/public_html/config/config.php) is not within the allowed path(s): (/home/u395489787:/tmp:/var/tmp:/opt/php-5.3/pear) in /home/u723559755/public_html/index.php on line 9


Оказывается, причина ошибки была в том, что в коде корень сайта определялся в зависимости от $_SERVER['DOCUMENT_ROOT']:
$SITE_ROOT = $_SERVER['DOCUMENT_ROOT'];

Возможно, когда я делал запрос, другой пользователь пытался обратиться к другому сайту этого хостинга, и мой сайт получал неверное значение переменной $_SERVER['DOCUMENT_ROOT'].

Изменение определения корня сайта устранило эту проблему:
$SITE_ROOT = dirname(__DIR__);