Как я могу ослабить ограничение PHP open_basedir? - PullRequest
21 голосов
/ 22 октября 2008

open_basedir ограничивает файлы, которые могут быть открыты PHP в дереве каталогов.

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

Предупреждение: realpath () [function.realpath]: open_basedir ограничение в силе. Файл (/var/www/vhosts/domain.tld/zend/application) находится за пределами разрешенного пути (путей): (/Var/www/vhosts/domain.tld/httpdocs:/tmp) в /var/www/vhosts/domain.tld/httpdocs/index.php по линии 5

Мой веб-корень здесь:

/var/www/vhosts/domain.tld/httpdocs

Мои библиотеки и каталог конфигурации находятся здесь:

/var/www/vhosts/domain.tld/zend

Как лучше всего обойти ограничение open_basedir, чтобы дерево каталогов в папке домена стало доступно моему приложению? У меня есть несколько доменов, с которыми я хочу сделать это, и я также явно опасаюсь создавать уязвимости безопасности.

Примечание: я использую CentOS, Apache, Plesk, и у меня есть root-доступ по ssh к серверу. И хотя это не относится к Zend Framework напрямую, я использую его в этом случае. Итак, вот включение из начальной загрузки Зенда:

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());

Ответы [ 3 ]

21 голосов
/ 22 октября 2008

Вы также можете легко сделать это для каждого каталога, используя конфигурационный файл Apache (предполагается, что это ваш веб-сервер) (например, httpd.conf)

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
</Directory>

Вы также можете полностью снять ограничение с помощью

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>
2 голосов
/ 22 октября 2008

добавьте пути, к которым вам нужен доступ (/var/www/vhosts/domain.tld/zend) к вашей директиве open_basedir (вы можете указать несколько путей, используя разделитель пути ':' или ';' в окнах)

обратите внимание, что значения в open_basedir являются префиксами, что означает, что все, что находится в /var/www/vhosts/domain.tld/zend, будет доступно

1 голос
/ 09 апреля 2014

В Parallels Plesk Panel (например, 1 и 1) вы можете сделать это в настройках панели PHP:

enter image description here

здесь:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...