我怎样才能放松PHP的open_basedir限制?

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

我在我的web根目录之外存储了几个类库和configuration文件。 这样Web服务器不会公开访问它们。 但是,当我尝试从我的应用程序中包括他们,我得到一个open_basedir限制这样的错误:

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

我的网站是在这里:

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

我的库和configuration目录在这里:

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

放松open_basedir限制的最佳解决方法是什么,以便域文件夹下的目录树可用于我的应用程序? 我有很多我想要做的事情,而且我也显然对创build安全漏洞持谨慎态度。

注意:我正在使用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()); 

您也可以使用Apache(假定这是您的Web服务器)configuration文件(例如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> 

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

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

在Parallels Plesk Panel(例如1and1)中,您可以在PHP面板设置中执行此操作:

在这里输入图像描述

这里:

在这里输入图像描述