IT

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

itgroup 2023. 2. 6. 23:25
반응형

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

PHP에서 현재 실행 중인 스크립트의 부모 디렉토리를 www root에 상대적으로 가져오는 가장 깨끗한 방법은 무엇입니까?다음과 같이 가정합니다.

$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'

아니면 그냥:

$something_else == '/relative/path/to/script/'

그리고 난.../relative/path/to/슬라시가 제대로 박힌 채로요어떻게 할까요?라이너는 1개가 바람직하다.

편집

www 루트에 상대적인 경로를 얻어야 합니다.dirname(__FILE__)파일 시스템에서 절대 경로를 제공하므로 작동하지 않습니다. $_SERVER['SCRIPT_NAME']반면 www 루트에서는 'displayed'가 됩니다.

스크립트가 다음 위치에 있는 경우/var/www/dir/index.php다음 항목이 반환됩니다.

dirname(__FILE__); // /var/www/dir

또는

dirname( dirname(__FILE__) ); // /var/www

편집

이는 app_root에서 상대 경로를 결정하기 위해 많은 프레임워크에서 사용되는 기술입니다.

파일 구조:

/var/ww/index.displaces를 표시합니다.서브디르/도서관.php

index.disputer는 모든 요구가 라우팅되는 디스패처/부스트랩 파일입니다.

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 매직 상수를 참조하십시오.

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

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

$parent_dir = dirname(__DIR__);

질문을 제대로 이해했다면 실행 중인 스크립트가

/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/'

이게 도움이 되길 바라.

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

부모 디렉토리에 대해 @mike b에서 권장하는 파일과 현재 디렉토리의 이중 dirname을 한 번만 사용하면 찾을 수 있습니다.

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

이것은 제가 사용하는 기능입니다.한 번 작성했기 때문에 항상 다음 기능을 사용할 수 있습니다.

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."";
}

이거 먹어봐.Windows 서버 또는 Linux 서버 모두에서 동작합니다.

str_replace('\\',/',dirname(dirname(_FILE__)))

이것도 가능한 해결책입니다.

$relative = '/relative/path/to/script/';
$absolute = __DIR__. '/../' .$relative;

이게 도움이 됐으면 좋겠다

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

반응형