php包含()'知道'它的请求者吗?

时间:2015-06-14 16:18:14

标签: 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-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。

3 个答案:

答案 0 :(得分:1)

您可以在PHP文件的开头运行函数debug_backtrace()以获取以前的PHP文件。

答案 1 :(得分:1)

你可以在你的代码和包含文件中定义一个全局常量,检查它是设置为false还是undefined然后die();这将阻止对文件的直接访问:

define('DIRECT', false);

在文件中,您将阻止访问:

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

答案 2 :(得分:0)

编辑:

要回答您的标题问题:不,包含文件无法知道是谁调用了它。但是,您可以在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中传输路径,然后将其与包含文件的路径进行比较。