是否可以将一些代码放在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。
答案 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中传输路径,然后将其与包含文件的路径进行比较。