오랜만의 블로깅인데 SQL 이야기가 아니네요. ㅎㅎ
이번에 잠시 XpressEngine이 필요해서 잠시 설치를 해봤는데 설명과 다른 부분이 좀 보여서 기록차 글을 남깁니다.
저같은 사람이 찾아보고 도움이 될 수 있도록. ^^;;

0. 환경
windows 7 x64
MSSQL 2008 Dev x64
최대한 Windows 환경에서 진행하기 위해 PHP 모듈만을 가져오고 웹서버와 DB는 IIS 7.5와 MSSQL 2008을 사용하도록 합니다.

1. IIS 설치
[Control Panel\All Control Panel Items\Programs and Features - Turn Windows features on or off] 으로 들어간 다음 [Internet Information Services] 을 선택 합니다.
그리고 [Internet Information Services - World Wide Web Services - Application Development Features - CGI] 를 체크해 줍니다.
(간단한 부분이니 귀찮아서 그림은 패스 합니다. ㅎㅎ)
이제 [확인] 버튼을 누르면 IIS 7.5 준비는 완료됩니다. 참 쉽죠? ㅎㅎ

2. PHP windows binary 다운로드
예전에는 다음 URL에서 PHP 모듈을 다운받았었습니다.
http://www.php.net/downloads.php
하지만 들어가보면 windows binary는 다음에서 다운로드를 받으라고 합니다.
http://windows.php.net/download/
여기로 들어가서 PHP 5.3의 "VC9 x86 Non Thread Safe"을 다운로드 받습니다.
   VC6 = Apache용 , VC9 = IIS용
   Non Thread 방식은 IIS에서 안정성 문제와 성능적인 문제로 선택하는듯 합니다.
이제 다운받은 파일을 특정 폴더에 넣고 압축을 풉니다.

3. IIS에 PHP 모듈 세팅
압축을 푼PHP 폴더에서 "php.ini-development" 파일을 "php.ini"로 복사한 다음 사용합니다. production이라는 확장사는 운영서버용입니다.
그리고 php.ini파일에서 다음 부분을 수정합니다. (대부분 주석을 제거해 주게 됩니다.)
   fastcgi.impersonate = 1
   cgi.fix_pathinfo=1
   cgi.force_redirect = 0
   extension_dir = "./ext"
   extension=php_gd2.dll
다음을 순서대로 수행합니다.
[IIS - 서버명 click - 오른쪽 화면의 Handler Mappings 실행 - 목록에서 마우스 우클릭 - Add module mapping]
다음 정보를 입력합니다. (php-cgi.exe 경로는 압축을 푼 경로를 입력합니다.)
   Request path : *.php
   Module : FastCgiModule
   Executable(optional) : "C:\feisia\XE\PHP\php-cgi.exe"
   Name : PHP FastCGI
Request Restrictions 클릭 후
   Mapping 탭
      Invoke handler only if request is mapped to: 체크
      File or folder 선택

4. XE 다운로드 및 설치 1
다음 사이트에서 XE Core를 다운로드 받습니다. 저는 최신 버전인 1.4.4.4를 다운 받았습니다.
http://www.xpressengine.com/?mid=download&category_srl=18322907
적당한 폴더에 압축을 풀어 둡니다. (저는 c:\feisia\WWW_TEST에 압축을 풀었습니다. 이안에 XE라는 폴더가 생성됩니다.)
IIS에서 새로운 사이트를 생성하고, 위치는 방금 압축을 푼 폴더를 지정합니다. 포트는 8080으로 하였습니다. (저는 c:\feisia\WWW_TEST 를 지정했습니다.)

이 폴더에 test.php파일을 생성하여 내용은 다음과 같이 입력하여 저장합니다.
<?php
phpinfo();
?>
다음과 같이 test.php파일에 접근해 보면 무슨 timezone이 어쩌고 하면서 오류가 발생합니다.
http://localhost:8070/test.php
timezone이 지정되지 않아서 발생하는 오류입니다. php.ini파일을 열어 timezone 설정 부분에 다음과 같이 추가해 줍니다.
date.timezone=Asia/Seoul
설정 변경 후에는 IIS 서비스를 재시작 해줍니다. 이제 다시한번 test.php 파일을 열어 보면 php 설치 정보가 정상적으로 나타나는것을 볼 수 있습니다.

이제 다음 URL로 접근하여 XE 설치 초기화면이 잘 나타나는지 확인합니다.
http://localhost:8070/xe/
다시 오류가 발생할텐데 기본 파일명에 XE의 기본 파일인 index.php가 추가되지 않아서 발생한 오류입니다.
생성된 사이트 이름을 클릭한 다음 "Default Document"에 "index.php"를 추가해 줍니다.
자. 이제 XE를 설치할 준비가 되었습니다.

4. XE 다운로드 및 설치 2
다음 URL을 통해 XE 설치를 진행합니다.
http://localhost:8070/xe/
1) 처음에 언어 선택은 당근 한국어. ㅎㅎ
2) 필수 설치 조건도 당연히 모두 Pass
3) 다음 단계에서 오류가 발생합니다.
Call-time pass-by-reference 어쩌고 저쩌고 나오는데 다시 php.ini파일을 열어 다음 설정을 수정해 줍니다.
allow_call_time_pass_reference = On
물론 IIS 서비스 재시작은 잊지 말아 주시구요. 자 페이지가 정상적으로 떳습니다.
DB를 선택하는 페이지인데.. mssql이 선택되지 않습니다.

먼저 장비에 SQL 2008 Native Client가 설치되어 있지 않다면 다음 URL에서 다운받아 설치합니다. (SQL 2008 client가 설치되어 있다면 아마 같이 깔렸을겁니다.)
http://www.microsoft.com/downloads/ko-kr/details.aspx?familyid=C6C3E9EF-BA29-4A43-8D69-A2BED18FE73C&displaylang=ko
그리고 다음 URL에서 "SQL Server Driver for PHP"를 다운받아 설치합니다.
단지 압축을 풀면 php.ini에서 추가할 수 있는 dll파일들이 생성됩니다. 이 dll파일들을 PHP 폴더의 하위폴더인 ext 폴더에 복사합니다.
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displayLang=en
php.ini에서 다음 부분을 추가해 줍니다.(PHP 5.3 , non thread safe , IIS라는 의미입니다.)
extension=php_sqlsrv_53_nts_vc9.dll
다시 IIS 서비스 재시작 후 XE 설치 페이지를 리프레시 해보면 mssql이 선택 가능하게 됩니다.

4) 드디어 마지막 단계 입니다. 계정 정보를 입력하는 페이지 입니다.
DB의 호스트명과 port를 입력하는란이 나누어져 있는데 "DB 호스트네임" 부분에 DB 접속 포트를 함께 입력해야 합니다.
저는 5433 포트를 사용했는데 이때 다음과 같이 입력해야 합니다.
   MANHA-PC,5433
port 입력칸은 비워 둡니다.
가장 아래의 "등록" 버튼을 누르면 이제 설치는 종료됩니다.
이 단계에서 오류가 나면 어떤 오류라는 말이 안나오고 그냥 "null"이라는 메세지와 함께 설치 첫단계로 넘어가 버리게 됩니다. (젠장!!)


[참고자료]
[IIS 7 초급 1-2] PHP 어플리케이션을 위한 IIS 7, PHP 설치 및 구성
http://laigo.kr/565
Non Thread Safe 와 Thread Safe의 차이
http://cafe.naver.com/phpcafe.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=7753
MSSQL - PHP 환경 설정
http://blog.naver.com/resious?Redirect=Log&logNo=30085454668


제 전문 분야도 아니고 해서 귀찮음이 적잖게 섞여서 그림은 한장도 넣지 못했습니다.
그래도 각 단계별로 고생한 부분을 정리 했으니 분명 도움이 되는 분들이 있을거라 믿습니다. ㅎㅎ
혹시나 다른 오류를 만나게 되실 경우 말씀해 주세요~! ^^

하만철 / Ha Man-cheol

AND