Подтвердить что ты не робот

Получите 2 уровня от dirname (__FILE__)

Как я могу вернуть имя пути из текущего файла, только 2 каталога вверх?

Итак, если мой текущий URL-адрес файла возвращается theme/includes/functions.php

Как я могу вернуть "theme/"

В настоящее время я использую

return dirname(__FILE__)
4b9b3361

Ответ 1

PHP 7

return dirname(__FILE__, 2);

PHP 4 и выше

return dirname(dirname(__FILE__));

С помощью PHP7 вы можете получить дальнейшее дерево каталогов, указав параметр levels, в то время как pre-7 PHP потребует дополнительной вложенности функции dirname.

http://php.net/manual/en/function.dirname.php

Ответ 2

Еще проще, чем dirname(dirname(__FILE__));, используется __ DIR__

dirname(__DIR__);

который работает с php 5.3 on.

Ответ 3

[ web root ]
    / config.php
    [ admin ] 
        [ profile ] 
            / somefile.php 

Как вы можете включить config.php в файл somefile.php? Вам нужно использовать dirname с 3 структурами каталогов из текущего файла somefile.php.

require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; 

dirname(dirname(dirname(__FILE__))) . '/config.php'; # 3 directories up to current file

Ответ 4

Как было предложено @geo, здесь расширенная функция dirname, которая принимает второй параметр с глубиной поиска dirname:

/**
 * Applies dirname() multiple times.
 * @author Jorge Orpinel <[email protected]>
 * 
 * @param string $path file/directory path to beggin at
 * @param number $depth number of times to apply dirname(), 2 by default
 * 
 * @todo validate params
 */
function dirname2( $path, $depth = 2 ) {

    for( $d=1 ; $d <= $depth ; $d++ )
        $path = dirname( $path );

    return $path;
}

Заметьте, что @todo может быть релевантным.

Единственная проблема заключается в том, что если эта функция находится во внешнем include (например, util.php), вы не можете использовать ее для включения такого файла: B

Ответ 5

Позднее стороне, но вы также можете сделать что-то вроде ниже, используя \..\..\ столько раз, сколько необходимо для перемещения вверх по уровням каталогов.

$credentials = require __DIR__ . '\..\App\Database\config\file.php';

Что эквивалентно:

$credentials = dirname(__DIR__) . '\App\Database\config\file.php';

Преимущество состоит в том, что он избегает наличия гнезда dirname, например:

dirname(dirname(dirname(__DIR__))

Обратите внимание, что это проверено на сервере IIS - не уверен в Linux-сервере, но я не понимаю, почему это не сработает.

Ответ 6

require_once(dirname(__FILE__) . "/../../functions.php");

Ответ 7

Это старый вопрос, но соответствующий вопрос.

Использование:

basename(dirname(__DIR__));

чтобы вернуть только второе имя родительской папки - "тема" в этом случае.

http://php.net/manual/en/function.basename.php