В PHP, какой будет самый чистый способ получить родительский каталог текущего скрипта, связанного с www root? Предположим, что у меня есть:
$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
Или просто:
$something_else == '/relative/path/to/script/'
И мне нужно получить /relative/path/to/
с правильно вставленными косыми чертами. Что ты предлагаешь? Предпочтительным является один вкладыш.
РЕДАКТИРОВАТЬ
Мне нужно получить путь относительно www root, dirname(__FILE__)
дает мне абсолютный путь в файловой системе, так что это не сработает. $_SERVER['SCRIPT_NAME']
с другой стороны, «начинается» с корнем www.
Если ваш скрипт находится в /var/www/dir/index.php
то возвращается следующее:
dirname(__FILE__); // /var/www/dir
или
dirname( dirname(__FILE__) ); // /var/www
Это метод, используемый во многих рамках для определения относительных путей из app_root.
Структура файла:
/ Вар / WWW / index.php подкаталог / library.php
index.php – это мой файл dispatcher / boostrap, который все запросы перенаправляются на:
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()
но вы получите эту идею.
Начиная с PHP 5.3.0 вы можете использовать __DIR__
для этой цели.
Каталог файла. Если используется внутри include, возвращается каталог включенного файла. Это эквивалентно dirname (__ FILE__).
См. Константы PHP Magic .
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
Если я правильно понял ваш вопрос, предположив, что ваш скрипт работает
/relative/path/to/script/index.php
Это даст вам родительский каталог исполняемого скрипта относительно документа www:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_NAME'])) . '/'; //$parent_dir will be '/relative/path/to/'
Если вы хотите, чтобы родительский каталог вашего скрипта выполнялся относительно корня сервера:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/'; //$parent_dir will be '/root/some/path/relative/path/to/'
Чтобы получить родительский указатель текущего скрипта.
$parent_dir = dirname(__DIR__);
Fugly, но это сделает это:
substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))
$dir = dirname($file) . DIRECTORY_SEPARATOR;
Вот что я использую, так как я не работаю> 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); }
Двойное имя dirname с файлом, предложенным @mike b для родительского каталога, и текущий каталог найден, просто используя этот синтаксис один раз.
Обратите внимание, что эта функция возвращает только NAME, после этого необходимо добавить клыки.
Попробуй это. Работает как на окнах, так и на Linux-сервере.
str_replace ( '\\', '/', имя_директории (имя_директории (__ FILE__)))
Это также возможное решение
$relative = '/relative/path/to/script/'; $absolute = __DIR__. '/../' .$relative;
Это функция, которую я использую. Создал его один раз, поэтому у меня всегда есть эта функциональность:
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.""; }
Я надеюсь, что это поможет вам.
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
Получил это сам, он немного клочковый, но он работает:
substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)
Поэтому, если у меня есть /path/to/folder/index.php
, это приводит к /path/to/
.