파일 경로


전처리기 명령 includerequire은 삽입하고자 하는 파일의 위치가 매우 중요합니다. PHP의 include와 require명령은 현재 실행되고 있는 PHP 스크립트의 경로를 기준으로 결합하고자 하는 소스파일의 위치를 찾습니다.

만일 실행하고 있는 스크립트와 동일한 폴더 경로에 있는 다른 소스를 사용할 때는 그냥 이름만 넣어도 됩니다. 하지만 다른 폴더나 하위 폴더에 있는 경우에는 상대 경로 또는 절대 경로 형태로 바르게 입력해야 합니다.

/text.php  
/lib.php  

위처럼 1개의 실행 스크립트 소스파일이 같은 폴더 안에 있습니다. text.php 소스파일은 include(lib.php); 형태로 다른 소스 파일의 경로를 설정하면 됩니다.

/dir1/text.php  
/lib.php  

위처럼 실행하는 스크립트가 서브 폴더 안에 있습니다. text.php가 실행되면 기본 경로는 /dir1이 됩니다. 따라서 include(../lib.php);처럼 이동한 상위 폴더 경로로 설정해야 합니다.

이처럼 실행 스크립트의 위치에 따라서 경로는 달라집니다. 만일 결합하고자 하는 소스의 파일 경로가 잘못된 경우 오류 메시지를 출력하거나 스크립트 실행이 중단될 수도 있습니다.


상대 경로


상대 경로란 현재 디렉터리를 기준으로 파일의 위치를 판별합니다.
자신의 하위 디렉터리에 있는 경우에는 현재 디렉터리(./)를 기준으로 작성하면 됩니다.

./ 파일명 		→ 현재 디렉터리의 파일명  
./폴더1/파일명 	→ 현재 디렉터리의 하부 폴더1 의 파일  

상위 폴더를 선택할 때는 ../를 사용하면 됩니다.

../파일명		→ 현재 디렉터리 상위 폴더의 파일명  
../../파일명	→ 현재 디렉터리의 상위/상위 폴더의 파일명  

../상위 폴더명/하부 폴더명/파일명 → 현재 디렉터리의 상위 폴더로 이동한 다음, 상위 폴더명의 하부 폴더명 안에 있는 파일명


절대 경로


절대 경로란 컴퓨터 하드디스크의 첫 루트부터의 전체 경로를 의미합니다.

윈도우의 경우,

c:\web\webdoc\test.php  

와 같이 드라이브명부터 시작합니다.

리눅스의 경우,

\home\web\webdoc\test.php  

와 같이 루트()부터 시작합니다.

절대 경로의 장점은 파일의 위치 오류를 방지할 수 있습니다. 하지만, 파일 위치가 변경될 때마다 프로그램 소스상에서 모두 바꿔야 하는 불편함이 있습니다. 또한 절대 경로를 사용하면 경로의 이름이 매우 긴 불편함이 있습니다.


DIR


PHP 는 현재 자신의 스크립트가 실행되는 경로를 출력해주는 특별한 상수명이 있습니다.
__DIR__ 은 현재 실행되는 스크립트의 경로를 출력합니다. __DIR__ 은 현재 실행되고 있는 스크립트의 서브 디렉터리 경로명까지 포함하여 출력합니다.

예제 파일 path-01.php

<?php
	echo __DIR__;
?>

결과

C:\php-7.1.4-Win32-VC14-x86\jinyphp

위의 예에서 __DIR__은 현재 실행하고 있는 스크립트의 유효한 파일 경로를 출력합니다. __DIR__ 상수를 통해 상태 경로를 계산하여 사용하면 유연하게 경로 계산을 할 수 있습니다.


DocumentRoot


PHP는 슈퍼 글로벌 서버 변수를 통해 현재 PHP가 실행되는 절대 상위 폴더를 출력합니다. 이전 __DIR__는 실행되는 서브 폴더까지 표시가 되지만, $_SERVER['DOCUMENT_ROOT']는 실행 폴더의 root만 표시됩니다.

예제 파일 path-02.php

<?php
	echo $_SERVER['DOCUMENT_ROOT'];
?>

결과

C:\php-7.1.4-Win32-VC14-x86

위의 예는 root 경로를 출력합니다. PHP의 내부 서버 실행의 문서 루트 경로, 아차피 웹 서버의 문서 루트 경로를 출력합니다.


FILE


__FILE__ 함수는 현재 실행하고 있는 스크립트의 소스 파일 정보를 출력합니다.

예제 파일 path-03.php

<?php
	echo __FILE__;
	echo "<br>";

	// PHP 파일의 절대 서버 경로
	echo realpath(__FILE__);
	echo "<br>";

	// PHP 파일 이름
	echo basename(__FILE__);
	echo "<br>";

?>

결과

C:\php-7.1.4-Win32-VC14-x86\jinyphp\path-03.php
C:\php-7.1.4-Win32-VC14-x86\jinyphp\path-03.php
path-03.php

위의 예는 현재 실행하고 있는 스크립트의 소스 파일 정보를 알아낼 수 있습니다. 또한 realpath() 함수를 통해 절대 경로로 변경할 수 있습니다. 만일 경로를 제외한 현재의 실행 스크립트 파일명만 알고 싶다면 basename() 함수를 이용할 수도 있습니다.


dirname


dirname() 함수는 입력된 파일 경로에서 디렉터리 부분만 추출할 수 있습니다.
PHP 7.x부터는 입력된 path에서 디렉터리 경로를 추출할 때 경로 레벨을 선택해서 가지고 올 수도 있습니다.

예제 파일 dirname.php

<?php
	$path = "/dir1/dir2/dir3/3text.txt";
	
	echo dirname($path,1)."<br>";
	echo dirname($path,2)."<br>";
	echo dirname($path,3)."<br>";
?>

결과

/dir1/dir2/dir3
/dir1/dir2
/dir1

위의 예는 입력한 $path 경로를 슬래시(/) 기호로 구분하여 각각 접근할 수 있습니다.