一个包含的PHP文件可以知道它包含在哪里吗?

前端之家收集整理的这篇文章主要介绍了一个包含的PHP文件可以知道它包含在哪里吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,

这是index.PHP

<?
require_once('header.PHP');
?>

可以通过header.PHP知道它是否包含在index.PHP中?

– 编辑 –

我找到了一个解决方案:

function backtrace_filename_includes($name){
    $backtrace_array=debug_backtrace();
    if (strpos($backtrace_array[1]['file'],$name)==false){
        return false;
    }else{
        return true;
    }
}

header.PHP文件

<?
if (backtrace_filename_includes('index.PHP')) echo "index.PHP";
?>
$_SERVER['PHP_SELF']将包含当前执行的脚本,没有办法从包含的文件确定哪个特定的脚本导致包含.

这意味着如果a.PHP包括b.PHP,其中包括c.PHP,c.PHP将无法知道b.PHP是包含者.最好的是,a.PHP是当前正在执行的脚本.

编辑:Yup,我的上述答案在技术上是错误的 – 你可以使用debug_backtrace找到调用者,即使没有函数,直到PHP 5.4,这删除了这个功能.

a.PHP只会:

<?PHP
echo 'A';
include 'b.PHP';

b.PHP

<?PHP
echo 'B';
include 'c.PHP';

c.PHP

<?PHP
echo 'C';
print_r(debug_backtrace());

输出

ABCArray
(
    [0] => Array
        (
            [file] => /tmp/b.PHP
            [line] => 3
            [function] => include
        )

    [1] => Array
        (
            [file] => /tmp/a.PHP
            [line] => 3
            [args] => Array
                (
                    [0] => /tmp/b.PHP
                )

            [function] => include
        )

)

所以当这个工作,你可能不应该使用它.当过度使用时,debug_backtrace可能是一个明显的性能阻力.

原文链接:https://www.f2er.com/php/138164.html

猜你在找的PHP相关文章