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

enc*_*nce 19 php include

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

ani*_*son 14

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

父文件:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite
include 'other_file.php';
Run Code Online (Sandbox Code Playgroud)

包含的文件:

if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me";
else echo "Unknown file included me";
Run Code Online (Sandbox Code Playgroud)

你也可以乱用get_included_files()或者debug_backtrace()在文件被包含的时间和地点找到事件,但这可能会有点混乱和复杂.


inh*_*han 14

$fileList = get_included_files();
$topMost = $fileList[0];
if ($topMost == __FILE__) echo 'no parents';
else echo "parent is $topMost";
Run Code Online (Sandbox Code Playgroud)

我认为当有一个单亲时,这应该给出正确的结果.

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


che*_*sum 12

迟到的答案,但......

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

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string)
Run Code Online (Sandbox Code Playgroud)

  • **高度不正确的答案**!`SCRIPT_NAME`返回最多的第一个文件.和`REQUEST_URI`是不可能的!他们不会在任何CMS中提供帮助.使用`debug_backtrace()`或`get_included_files()` (3认同)

Wad*_* M. 8

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

$including_filename = pathinfo(debug_backtrace()[0]['file'])['basename'];
Run Code Online (Sandbox Code Playgroud)

这将为您提供包含您的文件的名称。

要从包含的文件中查看您有权访问的所有内容,请从其中运行:

print_r(debug_backtrace());
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

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

)
Run Code Online (Sandbox Code Playgroud)