IT박스

실행중인 스크립트의 상위 디렉토리 가져 오기

itboxs 2020. 11. 23. 07:56
반응형

실행중인 스크립트의 상위 디렉토리 가져 오기


PHP 에서 www 루트와 관련된 현재 실행중인 스크립트 상위 디렉토리 를 얻는 가장 깨끗한 방법은 무엇 입니까? 내가 가지고 있다고 가정합니다.

$_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 루트에서 '시작'합니다.


스크립트가있는 /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()이있을 수 있지만 아이디어를 얻을 수 있습니다.


PHP 5.3.0부터이 __DIR__목적으로 사용할 수 있습니다 .

파일의 디렉토리입니다. 포함 내에서 사용하면 포함 된 파일의 디렉토리가 반환됩니다. 이것은 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/'

현재 스크립트의 parentdir을 가져옵니다.

$parent_dir = dirname(__DIR__);

추악하지만 이렇게 할 것입니다.

substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))

도움이 되었기를 바랍니다.

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

$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);
}

상위 디렉토리에 대해 @mike b가 제안한 파일이 포함 된 이중 dirname이며 해당 구문을 한 번만 사용하여 현재 디렉토리를 찾습니다.

이 함수는 NAME 만 반환하므로 나중에 슬래시를 추가해야합니다.


이 시도. Windows 또는 Linux 서버에서 모두 작동합니다 ..

str_replace ( '\\', '/', dirname (dirname (__ 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."";
}

도움이 되길 바랍니다

function get_directory(){
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
    $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol . "://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']);
}
define("ROOT_PATH", get_directory()."/" );
echo ROOT_PATH;

직접 확인했지만 약간 엉성하지만 작동합니다.

substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)

그래서 내가 가지고 있다면 /path/to/folder/index.php이것은 /path/to/.

참고URL : https://stackoverflow.com/questions/1882044/get-parent-directory-of-running-script

반응형