Как я могу вернуть имя пути из текущего файла, только 2 каталога вверх?
Итак, если мой текущий URL-адрес файла возвращается theme/includes/functions.php
Как я могу вернуть "theme/"
В настоящее время я использую
return dirname(__FILE__)
Как я могу вернуть имя пути из текущего файла, только 2 каталога вверх?
Итак, если мой текущий URL-адрес файла возвращается theme/includes/functions.php
Как я могу вернуть "theme/"
В настоящее время я использую
return dirname(__FILE__)
PHP 7
return dirname(__FILE__, 2);
PHP 4 и выше
return dirname(dirname(__FILE__));
С помощью PHP7 вы можете получить дальнейшее дерево каталогов, указав параметр levels, в то время как pre-7 PHP потребует дополнительной вложенности функции dirname
.
Еще проще, чем dirname(dirname(__FILE__));
, используется __ DIR__
dirname(__DIR__);
который работает с php 5.3 on.
[ 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
Как было предложено @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
Позднее стороне, но вы также можете сделать что-то вроде ниже, используя \..\..\
столько раз, сколько необходимо для перемещения вверх по уровням каталогов.
$credentials = require __DIR__ . '\..\App\Database\config\file.php';
Что эквивалентно:
$credentials = dirname(__DIR__) . '\App\Database\config\file.php';
Преимущество состоит в том, что он избегает наличия гнезда dirname, например:
dirname(dirname(dirname(__DIR__))
Обратите внимание, что это проверено на сервере IIS - не уверен в Linux-сервере, но я не понимаю, почему это не сработает.
require_once(dirname(__FILE__) . "/../../functions.php");
Это старый вопрос, но соответствующий вопрос.
Использование:
basename(dirname(__DIR__));
чтобы вернуть только второе имя родительской папки - "тема" в этом случае.