找出在PHP中调用我的函数的文件名

2022-08-30 13:24:41

如何找出调用我的函数的脚本的文件名?

例如

function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}

答案 1

一种解决方案可能是使用debug_backtrace函数:在回溯中,应该存在这种信息。

或者,正如Gordon在评论中指出的那样,如果您只想输出该信息而不使用它,也可以使用debug_print_backtrace


例如,包含以下内容:temp.php

<?php
include 'temp-2.php';
my_function();

并包含此:temp-2.php

<?php
function my_function() {
    var_dump(debug_backtrace());
}


从我的浏览器调用会得到这个输出:temp.php(i.e. the first script)

array
  0 => 
    array
      'file' => string '/.../temp/temp.php' (length=46)
      'line' => int 5
      'function' => string 'my_function' (length=11)
      'args' => 
        array
          empty

在那里,我有“”文件名 - 这是调用函数的文件名。temp.php


当然,你必须测试更多(特别是在函数不在“第一级”包含的文件中,而是在另一个包含的文件中的情况下 - 不确定debug_backtrace会有多大帮助,那里...) ;但这可能有助于您获得第一个想法...


答案 2

试试这个代码:

$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function'));
var_dump(debug_backtrace()[$key]['file']);

推荐