Php open_basedir没有任何效果

Php open_basedir没有任何效果,php,apache,apache2,httpd.conf,open-basedir,Php,Apache,Apache2,Httpd.conf,Open Basedir,对于“我的web主机”面板,需要阻止用户访问自己目录以外的文件(/var/www/u/s/username)。我试图在httpd.conf中使用这一行来阻止人们访问目录 <Directory /var/www/users/> php_admin_value open_basedir .:/usr/lib/php5 </Directory> php_admin_value open_basedir.:/usr/lib/php5 但是在php.ini中,它似乎没有效果。

对于“我的web主机”面板,需要阻止用户访问自己目录以外的文件(
/var/www/u/s/username
)。我试图在
httpd.conf
中使用这一行来阻止人们访问目录

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

php_admin_value open_basedir.:/usr/lib/php5
但是在
php.ini
中,它似乎没有效果。我做错了什么

  • 据我所知,它不是路径格式,它必须只有一个目录
  • 使用“.”with open_basedir毫无意义,“.”始终是当前目录。您可以
    chdir('/where/You/want')
    ,将“.”扩展为
    /where/You/want
  • 据我所知,它不是路径格式,它必须只有一个目录
  • 使用“.”with open_basedir毫无意义,“.”始终是当前目录。您可以
    chdir('/where/You/want')
    ,将“.”扩展为
    /where/You/want

  • 很可能是您修改了错误的“php.ini”。

    很可能是您修改了错误的“php.ini”。

    这可能是一个愚蠢的建议,但您是否在对php.ini进行更改后重新启动了Web服务器

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

    来自PHP.net()

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

    其他建议:

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


    这可能是一个愚蠢的建议,但您是否在对php.ini进行更改后重新启动了Web服务器

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

    来自PHP.net()

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

    其他建议:

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


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

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

    请注意,后面的斜杠用于防止用户“username”访问“username2”目录。

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

    <Directory /var/www/users/>
    php_admin_value open_basedir .:/usr/lib/php5
    </Directory>
    
    <Directory /var/www/u/s/username>
    php_admin_value open_basedir "/var/www/u/s/username/:/shared/path/"
    </Directory>
    
    
    php_admin_value open_basedir”/var/www/u/s/username/:/shared/path/“
    

    请注意,后面的斜杠是用来阻止用户“username”访问“username2”目录的。

    我把它放在主httpd.conf中(右边:)。我不能把它放在php.ini中,因为我有两个运行相同二进制文件的Apache实例,它们需要有不同的配置。在这种情况下,对问题的描述没有意义——一方面,如果放在httpd.conf中,它会起作用,而在php.ini中则不起作用。但另一方面,无论如何也不能将其放在php.ini中。那么您的问题是什么呢?它在httpd.conf中不起作用。很抱歉没有说清楚。创建一个只调用“phpinfo()”的脚本,并将其放在其他“受限”脚本应该驻留的位置。在浏览器中打开它,检查“Open_basedir”的值是多少。我将它放在主httpd.conf中(右边的:)。我不能把它放在php.ini中,因为我有两个运行相同二进制文件的Apache实例,它们需要有不同的配置。在这种情况下,对问题的描述没有意义——一方面,如果放在httpd.conf中,它会起作用,而在php.ini中则不起作用。但另一方面,无论如何也不能将其放在php.ini中。那么您的问题是什么呢?它在httpd.conf中不起作用。很抱歉没有说清楚。创建一个只调用“phpinfo()”的脚本,并将其放在其他“受限”脚本应该驻留的位置。在浏览器中打开它,检查“Open_basedir”的值是多少。我曾经主持的一个网络主机使用了这种类型的限制。它可以工作,尽管它会阻止一些脚本工作。我使用mod_vhost_别名,因此不能为每个用户添加不同的open_basedir。有更好的方法吗?我在另一台服务器上测试了它,它不会让我的chdir超出open_basedir允许的路径。我曾经主持的一个网络主机使用了这种限制。它可以工作,尽管它会阻止一些脚本工作。我使用mod_vhost_别名,因此不能为每个用户添加不同的open_basedir。有更好的方法吗?我在另一台服务器上测试了它,它不会让我chdir离开open_basedir允许的路径。既不需要双引号,也不需要尾随斜杠。尾随斜杠的结尾与是否需要无关,il只会指示是否将指定的目录用作前缀或“绝对”目录路径。既不需要双引号,也不需要尾随斜杠。结尾的尾随斜杠与是否需要无关,il将仅指示是否将指定目录用作前缀或“绝对”路径。
    <Directory /var/www/users/>
    php_admin_value open_basedir .:/usr/lib/php5
    </Directory>