Получить родительский каталог запущенного скрипта

В 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/ .