获取运行PHP include的文件的文件名

获取运行PHP include的文件的文件名,php,include,Php,Include,在使用PHPinclude时,如何找出调用include的文件?简而言之,父文件的文件名是什么?一个简单的方法是在父文件中(在include之前)分配一个变量,然后在包含的文件中引用该变量 父文件: $myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite include 'other_file.php'; if (isset($myvar_not_replicated)) echo "{

在使用PHP
include
时,如何找出调用
include
的文件?简而言之,父文件的文件名是什么?

一个简单的方法是在父文件中(在include之前)分配一个变量,然后在包含的文件中引用该变量

父文件:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite
include 'other_file.php';
if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me";
else echo "Unknown file included me";
包含的文件:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite
include 'other_file.php';
if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me";
else echo "Unknown file included me";

您还可以在文件包含的时间和地点查找事件,但这可能会变得有点混乱和复杂

$fileList = get_included_files();
$topMost = $fileList[0];
if ($topMost == __FILE__) echo 'no parents';
else echo "parent is $topMost";
我认为这应该在单亲家庭中产生正确的结果

我的意思是,父文件本身不是必需的或包含的文件。

回答晚了,但是

我使用以下命令检查正在运行的父文件名:

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string)

在父文件中,在包含子文件之前添加此行:

$_SESSION['parent_file'] = $_SERVER['PHP_SELF'];
然后在子文件中,读取会话变量:

$parent_file = $_SESSION['parent_file']

您可以直接使用debug_backtrace(),而无需在包含的文件中进行其他更改:

$including_filename = pathinfo(debug_backtrace()[0]['file'])['basename'];
这将为您提供包含您的文件的名称

要查看包含文件中您有权访问的所有内容,请在其中运行以下命令:

print_r(debug_backtrace());
您将得到如下结果:

Array
(
    [0] => Array
        (
            [file] => /var/folder/folder/folder/file.php
            [line] => 554
            [function] => include
        )

)
从这里得到这个:

echo“父完整URL:”;
echo$\u服务器[“脚本文件名”]。'
';
我在网上搜索相同的信息,以补充我关于php的在线课程,并找到了两种方法。第一个是

$file = baseline($_SERVER['PHP_SELF']);
echo $file;  //that outputs file name
但是,在包含或需要的情况下,它会获得包含或需要的最终文件。 也发现了这个,第二个

$file = __FILE__;
echo $file; //that outputs the absolute way from file
但是我只是在找文件名。 所以我把它弄混了,它很值钱

$file = basename(__FILE__);
echo $file; //that outputs the file name itself (no include/require problems)
尝试:

如果希望文件名扩展名为
.php
,请尝试以下操作:

$current_filename = basename(get_included_files()[0]);
如果要检查此文件是否包含在内? 然后:


希望它能起作用

一个更好的问题是,你为什么需要知道这一点?也许有一种更好的方法可以明确地完成您想要完成的任务。我想知道这一点,这样我就可以使用include来替换文档的整个头部部分。在head部分,我通过str_动态创建标签,将文件名连字符替换为空格和uc单词以将其覆盖。问题是,它所在的文件是包含的文件,而不是父文件。我正在使用@animuson的答案(已接受的答案),以防有人仍然想知道为什么需要这样做。Wadih M.的答案是正确的,尽管有点混乱。大多数其他内容只是盲目地转到父Most文件,而不是中间包。虽然被接受的答案不正确,但我还是会对答案投赞成票。这应该得到更高的评价,因为这样可以给出正确的答案,而无需编辑包含的容器文件。我有一个include,它需要容器文件的名称,这肯定比按照其他答案在100多个其他页面中更改
$var
值要好。答案极不正确
SCRIPT\u NAME
返回最早的文件。而且
REQUEST\u URI
是毫无疑问的!他们不会在任何CMS中提供帮助。使用
debug\u backtrace()
get\u included\u files()
@T.Todua这些限定符是有效的,但远远超出了此问题(和答案)的范围
$\u SERVER['SCRIPT\u NAME']
是此处所需的值。应注意,有时应使用[1]而不是[0]。这是一种解决方法,不是答案。如果作者能删除它,那就太好了。举个例子,这个答案是错误的,因为get_included_files返回一个文件包含的所有文件。OP问了相反的问题,他想知道witch文件包括这个文件。嘿@MaxMuster,你试过那个代码吗?它非常适合我,我总是只使用它。这不是一个答案,这是一个解决方法。这个答案是错误的,因为get_included_files返回一个文件包含的所有文件。OP问了相反的问题,他想知道巫婆的档案包括这个档案。
if(get_included_files()[0] == __FILE___) {
    // This File Was Not Included
} else {
   // This File Was Included
}