对于我的虚拟主机面板,需要阻止用户访问他们自己目录之外的文件 ( /var/www/u/s/username
)。我试图使用这一行httpd.conf
来防止人们进入目录。
<Directory /var/www/users/>
php_admin_value open_basedir .:/usr/lib/php5
</Directory>
但是在php.ini
,它似乎没有任何效果。我究竟做错了什么?
对于我的虚拟主机面板,需要阻止用户访问他们自己目录之外的文件 ( /var/www/u/s/username
)。我试图使用这一行httpd.conf
来防止人们进入目录。
<Directory /var/www/users/>
php_admin_value open_basedir .:/usr/lib/php5
</Directory>
但是在php.ini
,它似乎没有任何效果。我究竟做错了什么?
这可能是一个愚蠢的建议,但您是否在更改 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
您可能需要为每个用户目录添加一行:
<Directory /var/www/u/s/username>
php_admin_value open_basedir "/var/www/u/s/username/:/shared/path/"
</Directory>
请注意,尾部斜杠是为了防止用户“username”访问“username2”目录。
chdir('/wherever/you/want')
,有“。” 扩展为/wherever/you/want
很可能您正在修改错误的“php.ini”。