Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php是否包含();了解';它的请求者?_Php - Fatal编程技术网

php是否包含();了解';它的请求者?

php是否包含();了解';它的请求者?,php,Php,是否可以在PHP包含文件的顶部放置一些代码,以防止它包含在我的目录树中某个级别下的任何目录中?考虑到以下目录结构: |--Myapp |--includes |include-this-in-my-app-only.php |--index-for-my-app.php |--contact-for-my-app.php |--tenant-1-directory |--index-for-tenant-1.php |--contact

是否可以在PHP包含文件的顶部放置一些代码,以防止它包含在我的目录树中某个级别下的任何目录中?考虑到以下目录结构:

|--Myapp
   |--includes
      |include-this-in-my-app-only.php
   |--index-for-my-app.php
   |--contact-for-my-app.php
   |--tenant-1-directory
      |--index-for-tenant-1.php
      |--contact-for-tenant-1.php
   |--tenant-2-directory
      |--index-for-tenant-2.php
      |--contact-for-tenant-2.php
   |--tenant-3-directory
      |--index-for-tenant-3.php
      |--contact-for-tenant-3.php
我是否可以在include文件的顶部添加一些内容,如果从我自己的目录下的任何目录请求,则禁止包含该文件?还是有其他办法?我正在使用VPS。

编辑:

回答标题问题:不,包含文件不知道是谁调用了它。但是,您可以在include之前添加一个变量,以说明调用方是谁:

caller.php:

$caller = "caller a";
include("include.php");
include.php:

// here you can manage $caller to know exactly who has called.
echo $caller;

对于您的特定情况,您可以始终以$caller格式传输路径,然后将其与include文件的路径进行比较。

您可以运行函数
debug\u backtrace()
在PHP文件的开头获取上一个PHP文件。

您可以在代码中定义一个全局常量,并在包含的文件中检查其是否设置为false或undefined,然后die();这将阻止对文件的直接访问,如下所示:

define('DIRECT', false);
在文件中,您将阻止对以下内容的访问:

if(!DIRECT || !defined('DIRECT')){
die('DIRECT ACCESS NOT ALLOWED');
}

您可以使用检查“包含”文件列表(包括索引文件),以确定包含调用来自哪个租户。您能告诉我们有关您的用例的更多信息吗?也许有更好的方法来解决你的整体问题。一般来说,你的建议听起来会导致代码维护困难。如果你认为你想要或需要这样做,那么其他的东西已经从根本上错了。我想这是我的答案。只是为了确认一下,基本上我所做的是通过定义一些东西来“播种”每个文件。然后要求正确定义include文件以便加载。是这样吗?我知道生活中没有任何东西是100%安全和完全可靠的,但是有没有什么简单的方法可以被黑客攻击?这不会被黑客攻击,因为不允许直接访问该文件,除非你在代码中定义了直接常量,然后需要该文件,如果这是您想要的答案,请不要忘记将其标记为此问题的正确答案:)