워낙 단순하고 고수들이 많은 PHP School 에서 무슨 팁이라고 부를 수도 없겠지만..
초보로서 저보다 더 초보인 분들을 위해 간단한 루터 구하는 꽁수하나 올립니다.
리눅스를 기준으로 제작한 게시판을 윈도우의 APM 설치해서 테스트할 경우 웹계저의
루터(http://domain.com )가 아니라 웹 계정내에 따로 게시판용 디렉토리 board 를
만들어 그 곳에 게시판을 설치할 경우(http://domain.com/board )에는 디렉토리
구조차이로 에러가 나는 경우가 많습니다.
이럴 때 아래 함수(루틴?)을 이용하면 board 디렉토리의 경로를 쉽게 구할 수 있습니다.
$num = substr_count($REQUEST_URI, "/");
if ($num == 2)
$Root_Path = "./";
else {
for ($i = 2; $i < $num; $i++)
$Root_Path .= "../";
}
공통으로 인크루드해서 사용하는 파일( function.php 또는 lib.php...) 상단에 위 함수를
넣어주고, 다른 프로그램 파일 등에서 사용시에는..
include $Root_Path."admin/admin.php"
이런 식으로 $Root_Path 를 앞에 붙이고 다음에 루터로부터 원하는 파일의 위치와 이름을
차례로 적어주면 됩니다.
보시면 알겠지만 아주 간단하게 이 파일( function.php 또는 lib.php...)을 호출하고 있는
파일(즉, 실제 실행중인 프로그램 파일)의 웹 경로(REQUEST_URI)에서 슬래쉬(/)가
몇개나 있는지 검사해서 두 개 (/board/index.php) 라면 루터 디렉토리는 ./ 가 되고...
두 개 이상이면 증가하는 갯수만큼 ../ 를 반복 입력해주는 거죠.
만약 위 함수를 담고 있는 공통파일을 호출한 실제 실행중인 파일의 주소가
http://domain.com/board/bbs/list.php라면 / 가 세개(/board/bbs/list.php)므로 루터
디렉토리 이름($Root_Path)은 ../../ 가 됩니다.
$REQUEST_URI 는 PHP자체에서 제공하는 서버환경변수로 프로그램파일의 웹 주소에서
도메인 부분을 뺀 나머지 주소를 값으로 가집니다.
http://domain.com/board/bbs/list.php 라면..$REQUEST_URI => /board/bbs/list.php
REQUEST_URI 대신 다른 변수를 이용해도 되겠지만 아무래도 위 함수를 담고있는 프로그램
파일이 자체적으로 어떤 실행을 하기보다는 대부분 다른 프로그램파일의 실행에 인크루드
되어서 실행되는 경우가 많을 테니까 ..
_SERVER[PHP_SELF] 나 HTTP_SERVER_VARS[DOCUMENT_ROOT]등의 변수보다
더 적당한 것 같네요.(??)
Posted by 홍반장