如何查找调用我的函数的脚本的文件名?
例如,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
答案 0 :(得分:34)
解决方案可能是使用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
(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
会有很多帮助,那里......);但这可能会帮助你获得第一个想法...
答案 1 :(得分:5)
试试这个:
$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function')));
var_dump(debug_backtrace()[$key]['file']);
答案 2 :(得分:3)
除了Pascal Martins的建议外,您还可以安装PECL扩展程序APD并使用apd_callstack()之类的内容(引用示例)
// 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()。
答案 3 :(得分:0)
您可以将文件名作为参数传递:
function sthing($filename) {
echo __FILE__; // echoes myself
echo $filename; // echoes the file that called me
}
当你调用该函数时,你传递了魔法常量 FILE :
sthing(__FILE__);
答案 4 :(得分:0)
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
答案 5 :(得分:0)
这会打印出 file_name:line
function myFunction() {
$backfiles = debug_backtrace();
echo $backfiles[0]['file'] . ':' . $backfiles[0]['line'];
}