Как узнать имя скрипта, который вызвал мою функцию?
Например,
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__);