본문 바로가기

웹개발/PHP

php에서 상대경로 처리하는 팁

php에서 파일을 하위 폴더에서 include할 때 경로 처리 때문에 고생하는 분들이 많으실 겁니다.

저 또한 영국에서 php로 프로그래밍을 하다가 경로 때문에 고생을 많이 했었습니다.

그러다가 개인적으로 사용하는 그누보드의 g4_path가 떠올라 찾아보고 이렇게 쉽게 해결했습니다.

보통 루트에 common.php 파일을 만들어 두고 이 파일은 여러 경로에서 인클루드 하고 싶은데 다른 폴더에서 상위폴더의 common.php 를 인클루드하면 그 안에 있는 경로가 엉망이 되어 애러가 나게 되죠.

제가 사용하는 방법은 그누보드에서 사용하는 _common.php를 이용하는 방법입니다.

 

방법을 지금부터 설명드리겠습니다~

_common.php라는 파일은 php코드에서 다른 파일을 인클루드 할 경우 모든 폴더에 하나씩 집어넣습니다.

 

_common.php 파일의 내용입니다.

<? // 현재 폴더가 루트일 경우
$g4_path = ".";
include_once("$g4_path/common.php");
?>

 

하위폴더에서 공통 파일을 인클루드하고싶을경우

하위폴더에 있는 _common.php 파일의 내용입니다.

<? // 현재 폴더가 루트일 경우
$g4_path = "..";
include_once("$g4_path/common.php");
?>

 

하위의 하위폴더의 _common.php 파일의 내용입니다

<? // 현재 폴더가 루트일 경우
$g4_path = "../..";

Tistory 태그: ,


include_once("$g4_path/common.php");
?>

생각보다 간단하면서도 엄청 유용합니다~

자 이제 common.php 파일의 소스입니다.

<?

session_start(); // 세션시작은 항상 파일의 최상단에 위치해야 애러가 안납니다

// use path( must included from _common.php and must declare $g4_path
if (!$g4_path || preg_match("/:\/\//", $g4_path))
    die("<meta http-equiv='content-type' content='text/html; charset=utf-8'><script language='JavaScript'> alert('Wrong define.'); </script>");   
//if (!$g4_path) $g4_path = ".";
$g4[path] = $g4_path;
unset($g4_path);

 

// 이 아래의 내용은 공통적으로 필요한 include파일을 모두 집어넣었습니다.

include "$g4[path]/common/mysql.php";
$mysql = new mysql();
include "$g4[path]/common/common.php";
$common = new common();
include "$g4[path]/config.php";

// ...

?>

 

주의할점 : _common.php파일은 항상 소스의 최상단(주석도 있어서는 안되고 공백없이 <? 다음 라인에 바로 입력해야 합니다. 안그러면 찾기 힘든 http애러를 보게 될거에요~ 이거 찾아내고 해결하느라 많이 고생했습니다.

즐거운 코딩 되세요~