실행 중인 스크립트의 상위 디렉토리 가져오기
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__)에 해당합니다.
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
'IT' 카테고리의 다른 글
Woocommerce 3에서 프로그래밍 방식으로 주문에 요금 추가 (0) | 2023.02.10 |
---|---|
php 정적 함수 (0) | 2023.02.06 |
mysql.sock을 찾을 수 없습니다. (0) | 2023.02.06 |
Larabel 5.4 및 Mariadb에서 너무 많은 연결 오류 발생 (0) | 2023.02.06 |
PHP를 사용하여 오류 404 페이지를 만드는 방법 (0) | 2023.02.06 |