如何判断哪个PHP文件用于“包含”另一个?

时间:2009-09-10 16:23:56

标签: php

在PHP中使用include函数是一种从插入的文件中告诉你插入哪个文件的方法?例如,我经常通过我的代码使用以下行:

include 'header.php';

有没有办法告诉header.php里面插入了什么PHP文件?

5 个答案:

答案 0 :(得分:4)

您可以做的一件事是找到用于处理HTTP请求的文件的文件名。如果您的所有包含都直接包含在该脚本中,您可以在$_SERVER["SCRIPT_FILENAME"]

中找到该请求脚本的完整路径

您还可以浏览所包含代码中的debug_backtrace()以确定包含您的文件,例如

$trace=debug_backtrace();

foreach($trace as $t)
{
    if (in_array($t['function'], 
                 array('include', 'include_once', 'require', 'require_once')))
    {
        echo 'Included from '.$t['file']."\n";
        break;
    }
}

答案 1 :(得分:4)

debug_backtrace可以告诉你。

答案 2 :(得分:3)

The PHP manual lists the get_included_files function,这与您想要的内容有关......但one of the comments on that page说:

  

如果您想知道哪个脚本包含当前脚本,您可以使用$ _SERVER ['SCRIPT_FILENAME']或任何其他类似的全局服务器。

答案 3 :(得分:2)

虽然没有内置于该语言,但您可以设置一个编码模式,其中设置了一个变量,告诉您源文件执行包含:

$foo_php_old_includer = $includer;
$includer='foo.php';

include 'header.php'; // uses $includer to discern who is including it

// rest of source file

$includer=$foo_php_old_includer;

如果每个文件都有类似上面的内容,你可以创建一个“包含堆栈”,其中每个文件都知道包含它的文件。

所有这一切都说我怀疑你试图解决的问题可能会用不同的方法更好地解决。如果你能用这种方法描述一下你试图解决的问题,那么SO可能会帮助你找到更好的解决方案。

答案 4 :(得分:1)

您可以为此设置变量,但这不是一个完美的解决方案......

$CallingFile = 'myfile.php';
include 'header.php';

header.php现在可以询问变量$ CallingFile以了解谁调用它。