Поиск имени файла, который вызвал мою функцию в PHP

Как узнать имя скрипта, который вызвал мою функцию?

Например,

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 (ie 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 очень поможет. .) ; но это может помочь вам получить первую идею …

В дополнение к предложению Паскаля Мартинса вы можете установить APD- расширение 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__);