26

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

4

8 回答 8

17

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

父文件:

$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";

您也可以乱搞get_included_files()ordebug_backtrace()并找到包含文件的时间和位置的事件,但这可能会变得有点混乱和复杂。

于 2012-05-01T03:28:41.827 回答
16
$fileList = get_included_files();
$topMost = $fileList[0];
if ($topMost == __FILE__) echo 'no parents';
else echo "parent is $topMost";

我认为当有单亲时这应该给出正确的结果。

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

于 2012-05-01T04:06:53.980 回答
14

迟到的答案,但是...

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

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string)
于 2014-02-25T02:00:23.490 回答
8

您可以直接使用 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
        )

)
于 2019-03-20T03:38:31.310 回答
2

从这里得到这个:https ://stackoverflow.com/a/35622743/9270227

echo "Parent full URL: ";
echo $_SERVER["SCRIPT_FILENAME"] . '<br>';
于 2019-06-27T19:14:02.980 回答
1

我在网上搜索相同的信息以补充我关于 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)
于 2019-12-24T03:14:22.297 回答
-1

尝试:

$current_filename = basename(get_included_files()[0], '.php');

如果您想要带有.php扩展名的文件名,请尝试以下操作:

$current_filename = basename(get_included_files()[0]);

如果您想检查此文件是否包含在内?然后:

if(get_included_files()[0] == __FILE___) {
    // This File Was Not Included
} else {
   // This File Was Included
}

希望它有效!

于 2021-01-16T03:56:10.220 回答
-2

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

$_SESSION['parent_file'] = $_SERVER['PHP_SELF'];

然后在子文件中,读取会话变量:

$parent_file = $_SESSION['parent_file']
于 2017-10-06T12:01:41.660 回答