웹 문서를 다루다 보면 열린 문서나 파일의 전체 또는 상대 경로를 알아야 할 때가 종종 있다.  http://abcdef.org/list.php 갈은 URL 꼴과 http://abcdefg.org/list.php?id=123 같은 URI 꼴을 구분해야 할 때도 있다. 아래는 PHP 파일이 있는 곳의 절대 경로, 상대 경로와 URI, URL을 구하는 예제이다.

$file_server_path = realpath(__FILE__);
// PHP 파일 이름이 들어간 절대 서버 경로

$php_filename = basename(__FILE__);
// PHP 파일 이름

$server_path = str_replace(basename(__FILE__), "", $file_server_path);
// PHP 파일 이름을 뺀 절대 서버 경로

$server_root_path = $_SERVER['DOCUMENT_ROOT'];
// 서버의 웹 뿌리(루트) 경로(절대 경로)

$relative_path = eregi_replace("\/[^/]*\.php$", "/", $_SERVER['PHP_SELF']);
$relative_path = preg_replace("`\/[^/]*\.php$`i", "/", $_SERVER['PHP_SELF']);
// 웹 문서의 뿌리 경로를 뺀 상대 경로

$relative_file_server_path = $relative_path.$php_filename;
// PHP 파일 이름이 들어간 상대 경로

$base_URL = ($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
$base_URL .= ($_SERVER['SERVER_PORT'] != '80') ? $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'] : $_SERVER['HTTP_HOST'];
// 바탕 URL

$web_path = $base_URL.$relative_path;
// PHP 파일이 있는 곳의 웹 경로

$full_URL = $web_path.$php_filename;
$full_URI = $base_URL.$_SERVER['REQUEST_URI'];

echo "문서가 있는 곳의 절대 경로 : ".$server_path;
echo "\n";
echo "문서가 있는 곳의 전체 웹 경로 : ".$web_path;
echo "\n";
echo "문서가 있는 곳의 상대 경로 : ".$relative_path;
echo "\n";
echo "문서의 절대 경로 : ".$file_server_path;
echo "\n";
echo "문서의 상대 경로 : ".$relative_file_server_path;
echo "\n";
echo "문서의 전체 URL : ".$full_URL;
echo "\n";
echo "문서의 전체 URI : ".$full_URI;


  웹 경로가 http://abcdefg.org/dir/이고 서버 경로가 /home/users/username/www/dir/인 공간이 있다고 하자. 이 곳에 위 내용을 test.php에 넣고 주소창에 http://abcdefg.org/dir/test.php?id=123이라 넣으면 다음처럼 나올 것이다.

문서가 있는 곳의 절대 경로 : /home/users/username/www/dir/
문서가 있는 곳의 전체 웹 경로 : http://abcdefg.org/dir/
문서가 있는 곳의 상대 경로 : /dir/
문서의 절대 경로 : /home/users/username/www/dir/test.php
문서의 상대 경로 : /dir/test.php
문서의 전체 URL : http://abcdefg.org/dir/test.php
문서의 전체 URI : http://abcdefg.org/dir/test.php?id=123
2011/06/19 14:07 2011/06/19 14:07
얽힌 글타래
<셈틀말> 글갈래의 다른 글
글 걸기 주소 : 이 글에 다른 글을 걸 수 없습니다

덧글을 달아 주세요

  1. 별의아이 2014/04/21 23:59 고유주소 고치기 답하기

    eregi_replace 함수를 5.3부터는 권장 안한다는 식의 메세지가 뜨고 6.0부터는 사용 할 수 없다는데 대체할 수 있는 방법은 없는 건가요?
    php 버전이 5.4인데 상대경로를 출력할 필요가 있어서 사용하려니깐 에러문구가 뜨네요

  2. 감사합니다 2016/06/14 09:04 고유주소 고치기 답하기

    좋은 감사합니다!
    예수님 피흘려 당당하실 믿고 천국가는 복이있기를 원합니다!!

  3. 이승희 2016/07/16 04:52 고유주소 고치기 답하기

    안녕하세요 반가워요