一尘不染

如何放松PHP的open_basedir限制?

php

open_basedir限制了目录树中PHP可以打开的文件。

我在Web根目录之外存储了几个类库和配置文件。这样,Web服务器不会使它们公开访问。但是,当我尝试从应用程序中包含它们时,出现如下所示的open_basedir限制错误:

警告:realpath()[function.realpath]:open_basedir限制有效。文件(/var/www/vhosts/domain.tld/zend/application)不在允许的路径内:/
var / www /中的(/var/www/vhosts/domain.tld/httpdocs:/tmp)第5行的vhosts /
domain.tld / httpdocs / index.php

我的网络根目录在这里:

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

我的库和配置目录在这里:

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

放松open_basedir限制以使域文件夹下的目录树可用于我的应用程序的最佳解决方法是什么?我有很多要使用的域,而且我显然也对创建安全漏洞保持警惕。

注意:我正在使用CentOS,Apache,Plesk,并且我具有对服务器的root ssh访问权限。尽管这并不直接适用于Zend
Framework,但我在此实例中正在使用它。因此,这是Zend引导程序中包含的内容:

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

阅读 264

收藏
2020-05-26

共1个答案

一尘不染

您还可以使用Apache(假设这是您的Web服务器)配置文件(例如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>
2020-05-26