如何放松PHP';什么是开放的?

如何放松PHP';什么是开放的?,php,security,apache,Php,Security,Apache,限制PHP可以在目录树中打开的文件 我在web根目录之外存储了几个类库和配置文件。这样,web服务器就不会使它们公开访问。但是,当我尝试从应用程序中包含它们时,会出现如下open_basedir限制错误: 警告:realpath() [function.realpath]:打开\u basedir 有效的限制。 文件(/var/www/vhosts/domain.tld/zend/application) 不在允许的路径内: (/var/www/vhosts/domain.tld/httpdoc

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

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

警告:realpath() [function.realpath]:打开\u basedir 有效的限制。 文件(/var/www/vhosts/domain.tld/zend/application) 不在允许的路径内: (/var/www/vhosts/domain.tld/httpdocs:/tmp) 在里面 /var/www/vhosts/domain.tld/httpdocs/index.php 在线5

我的web根目录在这里:

/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());

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


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

您也可以使用Apache(假设这是您的web服务器)配置文件(例如httpd.conf)在每个目录上轻松地执行此操作


php_admin_value open_basedir“/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend”
您还可以使用完全删除限制

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>


php\u admin\u值open\u basedir无
在Parallels Plesk面板(例如1和1)中,您可以在PHP面板设置中执行此操作:

在这里:


如果op运行的是plesk,那么他需要比这稍微特殊一点:tom:取消限制不会完全造成安全漏洞吗?多谢!Brian:您只需要删除对从/var/www/vhosts/domain.tld/httpdocs运行php文件的限制,但是第一个选项是BetterHP_admin_value open_basedir。没有解决我的问题。谢谢你,但为什么是“ex:1和1”?他们不允许PHP覆盖吗?是的,但只是通过他们的面板。可能混淆是因为单词
ex
,我用例如。
<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>