Получить имя файла, в котором запущен PHP,

При использовании PHP include, как я могу узнать, какой файл вызывает include? Короче говоря, что такое имя файла родительского файла?

Ответ 1

Простым способом является назначение переменной в родительском файле (до включения), а затем ссылку на эту переменную во включенном файле.

Родительский файл:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite
include 'other_file.php';

Включенный файл:

if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me";
else echo "Unknown file included me";

Вы также можете объединиться с get_included_files() или debug_backtrace() и найти событие, когда и где файл был включен, но это может стать немного грязным и сложным.

Ответ 2

$fileList = get_included_files();
$topMost = $fileList[0];
if ($topMost == __FILE__) echo 'no parents';
else echo "parent is $topMost";

Я думаю, что это должно дать правильный результат, когда есть один родитель.

Под этим я подразумеваю ситуацию, когда родитель не является обязательным или включенным файлом.

Ответ 3

Поздний ответ, но...

Я проверяю текущее родительское имя файла, используя:

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string)

Ответ 4

Вы можете использовать debug_backtrace() напрямую, без каких-либо дополнительных изменений внутри включенного файла:

$including_filename = pathinfo(debug_backtrace()[0]['file'])['basename'];

Это даст вам имя файла, который включает вас.

Чтобы увидеть все, к чему у вас есть доступ, из включенного файла, запустите его из него:

print_r(debug_backtrace());

Вы получите что-то вроде:

Array
(
    [0] => Array
        (
            [file] => /var/folder/folder/folder/file.php
            [line] => 554
            [function] => include
        )

)

Ответ 6

В родительском файле добавьте эту строку, прежде чем включать дочерний файл:

$_SESSION['parent_file'] = $_SERVER['PHP_SELF'];

И затем в дочернем файле прочитайте переменную сеанса:

$parent_file = $_SESSION['parent_file']