Как узнать имя файла script, который вызвал мою функцию?
Например,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
Как узнать имя файла script, который вызвал мою функцию?
Например,
function sthing() {
echo __FILE__; // echoes myself
echo __CALLER_FILE__; // echoes the file that called me
}
Решением может быть использование функции debug_backtrace
: в 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
поможет многое, там...); но это может помочь вам получить первую идею...
В дополнение к предложению Паскаля Мартинса вы можете установить расширение 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().
Попробуйте следующее:
$key = array_search(__FUNCTION__, array_column(debug_backtrace(), 'function')));
var_dump(debug_backtrace()[$key]['file']);
Вы можете передать имя файла в качестве параметра:
function sthing($filename) {
echo __FILE__; // echoes myself
echo $filename; // echoes the file that called me
}
Когда вы вызываете функцию, вы передаете магическую константу FILE:
sthing(__FILE__);