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

时间:2017-05-02 05:46:42

标签: php include php-ini

问题

想象一下,我有以下目录结构:

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")不应该有效。

原因

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

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

研究/尝试

我已尝试使用include_path php.ini设置(请参阅:http://php.net/manual/en/ini.core.php#ini.include-path),但无处可去。我也在StackOverflow上广泛研究了这个主题,但无济于事 - 即How do I set an absolute include path in PHP?没有帮助,因为我不希望这是可选的或需要附加到文件的一段代码。 / p>

1 个答案:

答案 0 :(得分:1)

假设您有两个文件夹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文件。

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