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

Получить родительский каталог с запуском 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.

4b9b3361

Ответ 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/.