如何找出调用我的函数的脚本文件名?
例如:
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
如何找出调用我的函数的脚本文件名?
例如:
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
debug_backtrace
函数:在回溯中,这种信息应该是存在的。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
(即第一个脚本)
会得到以下输出:
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
是否能够帮助到你……);但这可能会帮助你获得第一个想法……
试试这段代码:
$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function'));
var_dump(debug_backtrace()[$key]['file']);
array_column
,你可以使用这个 polyfill:https://dev59.com/questions/BF4c5IYBdhLWcg3w59qQ#27422723 - userlond// returns an array containing an array of arrays.
Each array appears to contain:
[0] = function name
[1] = filename that contains function
[2] = *calling* line number in *calling* file
[3] = An array which is usually empty
但由于这是一个 PECL 扩展,可能会干扰 Zend Optimizer,因此最好使用 debug_backtrace()。
这会打印出文件名:行号
function myFunction() {
$backfiles = debug_backtrace();
echo $backfiles[0]['file'] . ':' . $backfiles[0]['line'];
}
2行 - 完成:
$backfiles=debug_backtrace();
echo $file_called_from=$backfiles[0]['file']; // complete filepath
echo "<Br>";
echo basename($file_called_from); // for only the filename without the path
你可以将文件名作为参数传递:
function sthing($filename) {
echo __FILE__; // echoes myself
echo $filename; // echoes the file that called me
}
当您调用函数时,需要传递魔术常量FILE:
sthing(__FILE__);