open_basedir没有任何影响

时间:2009-04-02 14:09:55

标签: php apache apache2 httpd.conf open-basedir

对于我的网络托管面板,需要阻止用户访问其目录(/var/www/u/s/username)之外的文件。我试图在httpd.conf中使用这一行来阻止人们上一个目录。

<Directory /var/www/users/>
php_admin_value open_basedir .:/usr/lib/php5
</Directory>

但在php.ini中,似乎没有效果。我做错了什么?

4 个答案:

答案 0 :(得分:2)

这可能是一个愚蠢的建议,但你在php.ini更改后重新启动了网络服务器吗?

您可能尝试使用的另一种方法是使用“auto_prepend_file”指令附加文件,以包含一个脚本,将open_basedir指令收紧到当前用户目录:

来自PHP.net(http://www.php.net/manual/en/ini.sect.safe-mode.php

  

从PHP 5.3.0开始,open_basedir可以在运行时收紧。这意味着如果在php.ini中将open_basedir设置为/ www /,则脚本可以使用ini_set()

在运行时将配置收紧到/ www / tmp /

其他建议:

需要正确设置Apache配置才能使INI覆盖生效。确保在服务器或虚拟主机的Apache配置中设置了“AllowOverride Options”或“AllowOverride All”。

http://us2.php.net/configuration.changes

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

答案 1 :(得分:1)

您可能需要为每个用户目录添加一行:

<Directory /var/www/u/s/username>
php_admin_value open_basedir "/var/www/u/s/username/:/shared/path/"
</Directory>

请注意,斜杠是为了防止用户“username”访问“username2”目录。

答案 2 :(得分:0)

  1. 据我所知,它不是路径格式,它必须只是一个目录;
  2. 使用“。”使用open_basedir毫无意义,“。”总是当前的目录。您可以chdir('/wherever/you/want'),拥有“。”扩展为/wherever/you/want

答案 3 :(得分:0)

很可能你正在修改错误的“php.ini”。