echo __FILE__;
__FILE__ 상수가 사용된 PHP 파일이 웹서버 컴퓨터 하드 드라이브에 저장된 물리적인 디렉토리 경로를 가져온다.
www.naver.com/news/topic.html
이런 웹상의 경로가 아니라
D:\APM_Setup\doc_test\project\news\topic.html
이런 종류의 경로값을 반환한다. 현재 파일이 구동되고 있는 웹서버 컴퓨터 폴더구조다.
$_SEVER['PHP_SELF'] 와 비교할때 인클루드시 반환하는 결과가 다르더다.
/* init.php */ $file = __FILE__; $self = $_SERVER['PHP_SELF']; /* view.php */ include_once(init.php); echo $file; // init.php 반환 echo $self; // view.php 반환/
인클루드 시키면 __FILE__ 은 이 상수코드가 입력된 php 파일의 참조를 반환하고 $_SERVER['PHP_SELF'] 얘는 최종적으로 보이는 페이지의 참조를 반환한다.
주의해야 할 점은 루트 디렉토리 경로를 변수로 선언하고자 할 때 PHP 내부에서와 HTML 파일 경로등은 조금 다르게 적용된다.
가령
/* init.php */ $_DIR_ROOT = str_replace('\\', '/', dirname(__FILE__)); $_WEB_ROOT = dirname($_SERVER['PHP_SELF']); $_WEB_ROOT = array_filter(explode('/', $_WEB_ROOT)); $_WEB_ROOT = '/'.array_shift($_WEB_ROOT).'/'; include_once($_DIR_ROOT.'/inc/config.php'); /* config.php */ class GlobalPath{}; $GP = new GlobalPath(); $GP -> ROOT = $_DIR_ROOT.'/'; $GP -> WEBROOT = $_WEB_ROOT; $GP -> INC = $GP -> ROOT .'inc/'; /* index.php */ include_once('../init.php'); include_once($GP -> INC.'doc.head.php');
기본적으로 init.php 파일이 프로젝트의 최상위 폴더에 위치한다고 가정한다
그리고 이 웹사이트는 localhost/temp/ 라는 가상디렉토리에 위치하고 있다
init.php 파일에서 $_DIR_ROOT 를 선언하고 \를 '/' 로 바꿔 놨다.
그리고 $_DIR_ROOT 를 ROOT 라는 식별자로 다시 GlobalPath 객체의 속성으로 넘겨줬다. ( 여기에서는 굳이 그럴필요 없다만.. ㅎ )
$_DIR_ROOT 는 알겠지만 init.php 파일이 저장된 폴더 경로다. 예를 들면 "D:/APM_Setup/html_doc/ " 이런 식의 값일 것이다 , 물론 여기는 현재 웹사이트의 최상위 폴더다.( 서버 컴퓨터 내부 폴더 경로 )
다시 $_WEB_ROOT 라는 변수에 현재 init.php 파일을 include 하거나 호출한 파일의 경로를 저장하고 PHP 함수등( dirname, explode 등)을 통해 폴더 구조에서 최상위 폴더 경로를 저장했다.
그러면 이 경로들($_DIR_ROOT, $_WEBROOT)을 이용해서 다른 파일들을 인클루드 하거나 링크시켜보자
index.php 파일을 보면 알겠지만 $GP -> INC.'doc.head.php' 의 경로로 doc.head.php 파일을 인클루드 시키는데는 아무런 문제가 없다. 그냥 $GP->INC 에 선언된 경로에 파일이 존재한다.
문제는 html 의 src, href 속성등에 선언할 경우다.
요런 식으로 css 파일을 불러오게 되면 $GP -> ROOT 의 경우 못 불러 온다
보면 알겠지만 경로가 다르다.
엄연히 따지면 $GP ->ROOT 가 정확한 경로다.
하지만 html 내부에 쓰일 경우는 웹사이트의 경로를 타야 한다
즉 웹사이트 경로에 따라 가상 디렉터리 아래로 들어가야한다.
물론 저기에서 www.domain.com/temp/css/basic.css 라면 더 정확할 것이다.(도메인이야 없어도 상관은 없다 )
이 부분을 주의해서 사용해야 겠다.
'코드 > PHP' 카테고리의 다른 글
[MySql]MySql Pagination, 페이지 리스팅 (0) | 2015.08.13 |
---|---|
[PHP]Query 결과 재사용, 인덱스 리셋 (0) | 2015.08.13 |
[MySql]외래키, Foreign Key 설정 (0) | 2015.08.03 |
[정규표현식]IP 주소찾기 (0) | 2015.07.30 |
port 번호 모음 (0) | 2015.07.29 |