【发布时间】:2012-10-28 18:37:31
【问题描述】:
我有一个目录/htdocs/unsecured,我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容。我在哪里以及如何只为这个目录设置open_basedir?
【问题讨论】:
我有一个目录/htdocs/unsecured,我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容。我在哪里以及如何只为这个目录设置open_basedir?
【问题讨论】:
您可以在 Apache 配置文件 php.ini 或 .htaccess 文件中设置 open_basedir。
我通常在 /etc/httpd/conf/httpd.conf 等 apache 配置文件中设置它。
您将拥有当前域/虚拟主机的目录结构,您可以直接在其中添加该行:
<VirtualHost 123.123.123.123:80>
<Directory /htdocs/unsecured>
php_admin_value open_basedir "C:/htdocs/unsecured"
</Directory>
</VirtualHost>
注意:123.123.123.123 是您的域的 IP 地址并且此示例块可能会为此遗漏 大量数据配置仅显示 open_basedir 所需的内容。
在 php.ini 中,您可以在更一般的级别上执行此操作(它将应用于您服务器上的 每个 域):
open_basedir = "/htdocs/unsecured"
在 .htaccess 中,你应该可以使用以下内容(虽然我没有测试过):
php_value open_basedir "/htdocs/unsecured"
编辑(Windows 路径)
根据评论,您正在 Windows 上运行 xammp(而不是使用虚拟主机)。有了这些信息,我建议将您的 open_basedir 规则放入您的 php.ini 文件中。这应该(希望)对你有用:
open_basedir = "C:\xampp\htdocs\unsecured"
在 linux 中,: 是字段分隔符。在 Windows 中,; 是分隔符 - 所以这个应该可以工作,但我无法亲自测试。
【讨论】:
/path/to/your/site 指的是一台配置了多个虚拟主机的机器,假设/htdocs/unsecure 与您的站点无关。如果是,您可以改用它。在 Windows 中,您应该可以使用像 open_basedir = "C:\xampp\htdocs\unsecure" 这样的反斜杠来设置它,但我通常会看到它使用正斜杠(如在 linux 中):open_basedir = "C:/xampp/htdocs/unsecure"。我在 Windows 上工作不多,所以我建议反复试验(可悲,但确实如此)。是的,我建议在路径周围加上引号(虽然不是必需的)。
shell_exec("ls /")吗?
您也可以在 php.ini、httpd.conf 或运行时change the open_basedir。
【讨论】: