Допустим, у меня есть 3 скрипта, основной/верхний, который включает второй, который, в свою очередь, включает третий. Нарисую, чтобы было понятно.
[скрипт верхнего уровня] -> [скрипт второго уровня] -> [скрипт третьего уровня]
Итак, есть ли простой способ получить имя «скрипта второго уровня» от третьего, может быть, есть какая-то предопределенная константа, знает ли третий скрипт, включенный вторым, своего родителя?
Пожалуйста, не называйте меня SCRIPT_NAME или PHP_SELF, я знаю, что это такое, и когда я использую его внутри последнего включенного скрипта, он показывает мне имя «скрипта верхнего уровня». Мне нужно имя родителя, а не дедушки!!!
debug_print_backtrace()
покажет все скрипты, которые были включены
Ну, согласно документации, debug_print_backtrace() дает мне слишком много данных, мне это не нужно. get_included_files() довольно хорош... Я бы предпочел что-то еще более простое, но, думаю, это то, что у меня есть. Насчет ссылки Андреа, ну, если хорошенько поискать там, я, наверное, мог бы найти там фразу "Вы могли бы также возиться с get_included_files()", но если вы прочитали мой вопрос и этого парня, вы, вероятно, заметили разницу! Вот почему я сказал: «Пожалуйста, не делайте мне SCRIPT_NAME или PHP_SELF», что также означает: не делайте мне ФАЙЛ! Я не задавал тот же вопрос!
Так вот Андреа, я задал конкретный вопрос, по вашей ссылке общий вопрос, поэтому ответы там "может быть это" или "может быть то"...
@SizuNakomoto Вся работа программиста состоит в том, чтобы применять и адаптировать общие методы к конкретным сценариям, поэтому не следует ожидать, что точное решение будет каждый раз подаваться вам на тарелке. Можно сказать, что вы не смогли понять, как применить приведенные там ответы к вашему делу, но не нужно так возмущаться тем, что кто-то указал вам на то, что, по их мнению, могло бы вам помочь.
get_included_files
должен быть полезен. Поместите следующий код в файл уровня 2 или уровня 3:
$files = get_included_files();
list($parent) = array_slice($files, -2, 1);
echo $parent;
Было бы полезно объяснить, что именно здесь делает array_slice
— вы полагаетесь на порядок возвращаемого массива? Или зная точную длину заранее?
Срез массива, чтобы получить предпоследний элемент.
Да, но Зачем предпоследний элемент? Гарантирован ли порядок этого массива? Какие условия необходимы для работы этого кода? Как люди могли адаптировать его к другим ситуациям?
@IMSoP да, в документации не упоминается гарантия порядка, но, похоже, она отлично справляется со своей задачей для приведенного выше конкретного примера. Если файлы включаются в другом порядке (например, последовательно), то необходим другой подход.
Отвечает ли это на ваш вопрос? Получить имя файла, в котором запущен PHP, включая