[PHP+MySQL] config 파일의 필요성 - 로컬(또는 테스트 서버) 작업파일을 바로 업로드하면 오류나는 이유
처음으로 포트폴리오를 만들 때 일입니다.
로컬(=테스트 서버)에서 작업할 땐 잘 동작하던 프로그램이 호스팅 서버에 업로드 된 후
Warning
include(C:/프로젝트명/database.php): failed to open stream: No such file or directory in
C:\프로젝트명\index.php
이런 메시지를 출력했습니다.
이유는 간단했습니다.
로컬에서 작업할 때 설정한 파일의 url경로가 호스팅 서버로 오면서 달라졌기 때문이죠.
그래서 include, <form>, <a> 등등...
url 경로 설정이 들어가는 모든 요소에서 오류를 일으켰습니다.
저는 프로젝트 구분을 위해 /프로젝트명/index.php
이렇게 경로를 사용했고
호스팅서버에선 프로젝트 구분이 필요 없었기에 경로가 /index.php
였기 때문입니다.
본론
이건 경로만 수정해주면 금방 해결되는 문제입니다.
제 경우는 ctrl+h
로 '/프로젝트명'을 검색한 뒤 전부 공백으로 치환해 주었습니다.
문제는 이 작업이 귀찮고 까먹을 확률도 높다는 점이죠;;
또한 상대경로를 써서 해결할 수도 있지만 만약 새로운 프로젝트를 만든다면?
그래서 과거 프로젝트에서 현 프로젝트로 정보를 불러올 일이라도 생긴다면??
여기서 필요한 것이 config 파일
입니다!
인터넷에 검색해보면 주로 프로그램의 설정값이 들어가는 곳이라고 하죠?
여기에 경로값을 함수로 넣어주고 include로 불러와 쓰는 겁니다.
그 후 로컬과 호스팅 서버의 config를 다르게 설정해주면,
앞으로는 바로바로 작업 파일을 업로드해도 오류가 없을 겁니다!
실습
config.php
$_conf=array();
$_conf['domain'] = $_SERVER['HTTP_HOST'];
$_conf['doc_home'] = $_SERVER['DOCUMENT_ROOT'];
$_conf['link'] = "http://호스팅서버 url";
// 로컬에 위치한 config파일이라면 "http://localhost/프로젝트명"이 들어가겠죠?
$_conf['link2'] = "http://호스팅서버 url 2";
// "http://localhost/프로젝트명2"
index.php
include "/config.php";
include $_conf['link']."/database.php"; //데이터베이스를 연결하는 파일입니다.
//연결정보는 $db함수에 담겨있다고 가정합시다.
$list = mysql_query("SELECT * FROM member;", $db);
print_r($list);
이제 위 파일들을 사용하면 데이터베이스 안의 member테이블의 내용을 전부 출력하게 됩니다!
그리고 이 파일 2개를 그대로 프로젝트2의 호스팅 서버에 올려도 똑같이 작동하죠.
만약 호스팅 서버가 만료되어 도메인을 바꾸더라도 수정하기 쉬워질 것입니다!