如何放宽 PHP 的open_basedir限制?

2022-08-30 19:15:44

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

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

警告:realpath() [function.realpath]:open_basedir限制生效。File(/var/www/vhosts/domain.tld/zend/application) 不在允许的路径内: (/var/www/vhosts/domain.tld/httpdocs:/tmp) in /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框架,但我在这个例子中使用它。所以这是来自Zend的引导的包含:

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

答案 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>

答案 2

将需要访问的路径(/var/www/vhosts/domain.tld/zend)添加到open_basedir指令中(您可以在窗口中使用路径分隔符“:”或“;”指定多个路径)

请注意,open_basedir中的值是前缀,这意味着 /var/www/vhosts/domain.tld/zend 下的任何内容都可以访问


推荐