如何阻止来自特定目录的包含 PHP

How to block includes from specific directories PHP

问题

假设我有以下目录结构:

root
| 123
| | index.php
| | abc
| | | file.php
| 456
| | another_file.php

如何配置 PHP 以便 index.php 可以包含 file.php 而不是 another_file.php

换句话说,include("abc/file.php") 应该有效,但 include("../456/another_file.php") 不应该。

原因

我需要这样做的原因是因为在我的网络服务器上,我在同一个文件系统上有两个虚拟主机,它们是为两个不同的用户准备的。每个用户都应该能够包含位于他们自己文件夹中的文件,但他们不应该能够包含来自外部文件夹的文件。

每个虚拟主机都有自己的 php.ini 文件(由 suPHP 提供)。

研究/尝试

我已经尝试使用 include_path php.ini 设置(请参阅:http://php.net/manual/en/ini.core.php#ini.include-path), but have got nowhere. I have also researched this topic extensively on Whosebug, but to no avail - i.e. How do I set an absolute include path in PHP? 没有帮助,因为我不希望这是可选的或一段代码需要附加到文件。

假设你有两个文件夹 123456 ,他们只能打开他们文件夹的文件 你可以试试这个:

在文件夹 123456 中创建 .user.ini 添加指令 open_basedir=./:/tmp/:/usr/local/php/ 提交 .usr.ini

 root
    | 123
    | | .user.ini
    | | index.php
    | | abc
    | | | file.php
    | 456
    | | .user.ini
    | | another_file.php

touch  ./root/123/.user.ini
echo 'open_basedir=./:/tmp/:/usr/local/php/' > ./root/123/.user.ini
touch  ./root/456/.user.ini
echo 'open_basedir=./:/tmp/:/usr/local/php/' > ./root/456/.user.ini

** 然后重启 php-fpm**

文件夹 .//root/123/

文件夹 /usr/local/php/ 是您的 php 文件夹,您 必须包含该文件夹 ,它应该取决于您安装 php 的位置,在我的电脑,它是 /usr/local/php/tmp 文件夹可能保存 som tmp 文件。

您可以使用:来划分不同的文件夹