Получить имя файла, который включает PHP-скрипт

вот пример того, что я пытаюсь сделать:

.в PHP
<ul><?php include("list.php") ?></ul>

список.в PHP

<?php
    if (PAGE_NAME is index.php) {
        //Do something
    }
    else {
        //Do something
    }
?>

как я могу получить имя файла, который включает в себя список.PHP скрипт (PAGE_NAME)? Я пробовал basename(__FILE__), но это дает мне list.php.

6 ответов


$_SERVER["PHP_SELF"]; возвращает то, что вы хотите


Если вы действительно нужно знать, из какого файла был включен текущий-это решение:

$trace = debug_backtrace();

$from_index = false;
if (isset($trace[0])) {
    $file = basename($trace[0]['file']);

    if ($file == 'index.php') {
        $from_index = true;
    }
}

if ($from_index) {
    // Do something
} else {
    // Do something else
}

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

basename($_SERVER['PHP_SELF'])

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


в коде, в том числе list.php, прежде чем включить, вы можете установить переменную с именем $this_page а то list.php можно увидеть тест на значение $this_page и действовать соответственно.


возможно, вы можете сделать что-то вроде следующего:

<ul>
    <?php
        $page_name = 'index';
        include("list.php")
    ?>
</ul>

список.в PHP

<?php
    if ($pagename == 'index') {
        //Do something
    }
    else {
        //Do something
    }
?>

решение basename($_SERVER['PHP_SELF']) работает, но я рекомендую ставить strtolower(basename($_SERVER['PHP_SELF'])) для проверки индекса.индекс PHP' или'.ошибки php.

но если вы хотите альтернативу вы можете сделать:
<?php if (strtolower(basename($_SERVER['SCRIPT_FILENAME'], '.php')) === 'index'): ?>.