Получить родительский каталог с запуском script
В PHP, какой был бы самый чистый способ получить родительский каталог текущего запуска script относительно www root? Предположим, что у меня есть:
$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
Или просто:
$something_else == '/relative/path/to/script/'
И мне нужно получить /relative/path/to/
с корректно вставленной косой чертой. Что ты предлагаешь? Предпочтительным является один вкладыш.
ИЗМЕНИТЬ
Мне нужно получить путь относительно корня www, dirname(__FILE__)
дает мне абсолютный путь в файловой системе, так что это не сработает. $_SERVER['SCRIPT_NAME']
С другой стороны, "начинается" с корнем www.
Ответы
Ответ 1
Если ваш script находится в /var/www/dir/index.php
, то возвращается следующее:
dirname(__FILE__); // /var/www/dir
или
dirname( dirname(__FILE__) ); // /var/www
Изменить
Это метод, используемый во многих рамках для определения относительных путей из app_root.
Структура файла:
/var/
www/
index.php
subdir/
library.php
index.php - это мой файл диспетчера/форварда, который все запросы перенаправляются на:
define(ROOT_PATH, dirname(__FILE__) ); // /var/www
library.php - это некоторый файл, в котором находится дополнительный каталог, и мне нужно определить путь относительно корня приложения (/var/www/).
$path_current = dirname( __FILE__ ); // /var/www/subdir
$path_relative = str_replace(ROOT_PATH, '', $path_current); // /subdir
Вероятно, лучший способ рассчитать относительный путь, затем str_replace()
, но вы получите идею.
Ответ 2
С PHP 5.3.0 вы можете использовать __DIR__
для этой цели.
Каталог файла. Если используется внутри include, то каталог возвращается возвращаемый файл. Это эквивалентно dirname (__ FILE __).
Смотрите PHP Магические константы.
C:\www>php --version
PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
C:\www>php -r "echo __DIR__;"
C:\www
Ответ 3
Если я правильно понял ваш вопрос, предположив, что ваш запуск script
/relative/path/to/script/index.php
Это даст вам родительский каталог вашего запуска script относительно документа www:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_NAME'])) . '/';
//$parent_dir will be '/relative/path/to/'
Если вы хотите, чтобы родительский каталог вашего запуска script относился к корню сервера:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/';
//$parent_dir will be '/root/some/path/relative/path/to/'
Ответ 4
Чтобы получить родительский адрес текущего script.
$parent_dir = dirname(__DIR__);
Ответ 5
Fugly, но это сделает это:
substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))
Ответ 6
$dir = dirname($file) . DIRECTORY_SEPARATOR;
Ответ 7
Вот что я использую, так как я не запускаю > 5.2
function getCurrentOrParentDirectory($type='current')
{
if ($type == 'current') {
$path = dirname(__FILE__);
} else {
$path = dirname(dirname(__FILE__));
}
$position = strrpos($path, '/') + 1;
return substr($path, $position);
}
Двойное имя файла с файлом, предложенным @mike b для родительского каталога, и текущий каталог найден, просто используя этот синтаксис один раз.
Обратите внимание, что эта функция возвращает только NAME, после этого необходимо добавить кляксы.
Ответ 8
Попробуйте это. Работает как с окнами, так и с сервером linux.
str_replace ( '\\', '/', имя_директории (имя_директории (__ FILE __)))
Ответ 9
Это также возможное решение
$relative = '/relative/path/to/script/';
$absolute = __DIR__. '/../' .$relative;
Ответ 10
Это функция, которую я использую. Создал его один раз, поэтому у меня всегда есть эта функциональность:
function getDir(){
$directory = dirname(__FILE__);
$directory = explode("/",$directory);
$findTarget = 0;
$targetPath = "";
foreach($directory as $dir){
if($findTarget == 1){
$targetPath = "".$targetPath."/".$dir."";
}
if($dir == "public_html"){
$findTarget = 1;
}
}
return "http://www.".$_SERVER['SERVER_NAME']."".$targetPath."";
}
Ответ 11
Надеюсь, это поможет вам.
echo getcwd().'<br>'; // getcwd() will return current working directory
echo dirname(getcwd(),1).'<br>';
echo dirname(getcwd(),2).'<br>';
echo dirname(getcwd(),3).'<br>';
Выход:
C:\wamp64\www\public_html\step
C:\wamp64\www\public_html
C:\wamp64\www
C:\wamp64
Ответ 12
Получил это сам, он немного клочковый, но он работает:
substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)
Итак, если у меня есть /path/to/folder/index.php
, это приводит к /path/to/
.