긍정곰의 연구소

PHP - Windows + httpdApache + PHP7 + MariaDB 서버구축 본문

긍정곰의개발일지/PHP

PHP - Windows + httpdApache + PHP7 + MariaDB 서버구축

긍정곰 2017. 7. 1. 09:47
※본 글은 지극히 개인적으로 참고하기위한 글로써 해요체 등의 존대는 쓰지 않으며, 설명이 부실할수 있습니다. 음슴체나 반말어투에 거부감이 있으신분은 다른자료를 참고하시길 권합니다. 그외에 내용의 설명이 부족하여 궁금한점이 있을경우 질문을 주시면 제가 아는 한도내에서 답변을 드리겠습니다.

※httpd의 최신버젼에서 php7의 curl이나 mbstring등의 라이브러리 연동에 문제가 있음을 발견하였습니다. 그러므로 httpd보다는 nginx를 이용하여 구축하시는 방법을 추천합니다.(하단 포스트 링크 첨부)

분명 이리저리 찾아보며 윈도우로 서버를 만들어두긴 했는데 한동안 방치하다가 다시 만지작 거릴려니 방법을 다 까먹었다....(요즘 노느라 반쯤 정신줄을 놓은듯하다) 그래서 기록을 남겨두고 나중에 다시 사용할일이 있을때 참고하고자 이렇게 기록을 남긴다.

우선 윈도우8.1이 설치된 PC로 서버를 구축하였다.(IIS를 사용하진 않을것이므로 버젼은 무관하다. 홈버젼이어도 상관없이 가능. IIS는 프로페셔널 이상의 버젼 에서만 지원한다)

아래는 필요한 도구들의 주소들이다.

​실질적인 서버구동역활을 하기위해 필요하다.
덤으로 비주얼스튜디오 재배포 패키지를 필요로 한다.

PHP7버젼으로 가면서 자체적으로 서버역활을 할순있으나, 오래전 방법들을 참고하다보니 아파치에 의존할수밖에 없었다.
그리고 여전히 아파치로 구동되는 방법도 그대로 지원함으로 편한대로 하면 될것이다.
마찬가지로 따로 빌드된 윈도우버전임에따라 비주얼스튜디오 재배포 패키지를 필요로 한다.

다른방편으로는 윈도우의 자체 웹서버 기능인 IIS(internet information service)나 nginx를 활용하는 방법이 있다.
대신 php-cgi와 연동해서 사용해야한다.

윈도우용버젼을보면 Thread Safe(쓰레드 세이프)와 Non Thread Safe(논 쓰레드 세이프)로 나뉘는데 아파치와 연동을 위해서는 쓰레드 세이프버젼으로 받아야한다.
논 쓰레드 세이프의 경우 아래에서 설정할 php7apache2_4.dll 파일이 누락되어있기때문에 아파치와 연동이 불가능하다.

마지막으로 데이터베이스 역할을 해줄 마리아 DB이다.
대부분 구 구축자료들은 MySQL을 사용하지만 사실상 개발한 인력이 동일 인물들인지라 어느걸 써도 무방하다.
허나 요즘 현황을 보자면 Maria DB를 사용하는것이 향후 문제가 발생할 확률이 적을것이라 본다.(MySQL은 이제 오라클에 흡수되었습니다.)

위에 마리아 DB를 제외하고는 설치파일을 제공하지 않기때문에 다운받아서 압축을 풀기만하면 설치가 완료된다.
마리아 DB도 원한다면 설치버젼이 아닌 압축파일로 내려받아 원하는곳에 풀어서 쓰면된다.


PHP 설정
내려받은 PHP의 압축을 풀면 php.ini-development라는 파일이 있을것이다.
이것을 php.ini로 변경해준다.
확장자명 변경에 대한 안내가 나오면 그대로 확인을 눌러서 변경을 확정하면 된다.
기본적인 설정으로는 데이터베이스 연동이 막혀있기때문에 확장자를 변경해준 php.ini를 에디터를 통해(에디터 툴이 없다면 아주 훌룡한 윈도우 메모장을 쓰자)일부 내용을 수정해준다.
먼저 확장기능 dll들의 경로를 지정해준다.

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"
extension_dir = "C:\php7\ext"

주석을 지우고 디렉터리 설정을 해줘도 되고 위에처럼 그냥 한줄 추가해줘도 된다.
그리고 추가로 확장기능중 어떤걸 사용할지 설정해줘야 하는데...

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

라고 되어있는 부분에 조금 내려보면 이런 구문들이 있다.

;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_fileinfo.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_exif.dll      ; Must be after mbstring as it depends on it
extension=php_mysqli.dll
;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll

여기서 사용할 확장기능은 앞에 세미콜론을 지워서 주석처리를 풀어준다.
마리아 DB(혹은 MySQL)를 사용할려면 extension=php_mysqli.dll 의 주석을 풀어주어야 사용가능하다.
오래된 자료들을 보면 extension=php_mysql.dll 뒤에 i가 안붙은 그냥 dll이 있으나, 지금 7버젼에는 해당 dll이 더이상 지원되지 않는지 확장기능 리스트에도 들어가있지 않으므로 그냥 위에 하나만 풀어주면 된다.
그리고 extension=php_pdo_mysql.dll PDO(PHP Data Object)확장 기능은 사용한다면 주석을 풀어주고 아니면 그대로 두어도 상관은 없다.


httpd 아파치 설정
아파치는 압축을 풀어준후 PHP와 연동시키고 서비스를 등록해주면 된다.
일단 PHP와 연동시키기 위해서는 압축을 풀어준 아파치 폴더안에서 conf라는 하위 디렉터리로 이동한다.
안에 보면 .conf 파일들중에 httpd.conf 라는 파일이 있을것이다.
이것을 에디터를 통해 열어서 아래 부분을 추가해준다.

PHPIniDir "C:\Windows"
LoadModule php7_module "C:\PHP\php7apache2_4.dll"
AddType application/x-httpd-php .html .php

하나 하나 설명하자면... PHPIniDir "경로" 는 php.ini가 들어있는 경로를 의미한다.
php.ini를 윈도우즈 폴더안에 넣었다면 위와같이, 아니라면 해당 경로를 절대경로로 지정해주면된다.(몇번 구축해본결과 굳이 윈도우즈 폴더안에 우겨넣을 필요가 없다. 그냥 최초의 PHP가 설치된 폴더에 넣어둔 상태에서 경로를 잡아줘도 사용함에 있어서는 아무런 지장이 없더라.)

php폴더에 그냥 넣어두고...

PHPIniDir "C:\php7"

위와 같이 해줘도 무방하다.

LoadModule php7_module "파일경로"는 압축을 풀어둔 PHP안에 php7apach2_4.dll 파일의 경로를 넣어주면된다.
PHP폴더를 C드라이브 최상위에 압축을 풀었다면 위와같이, 아니면 지정된 경로를 설정해주면된다.
만약 구버젼인 5.x버젼을 쓴다면 LoadModule php7_module이 아니라 LoadModule php5_module로 바꾸어줘야하며, 지정된 dll도 7이 아닌 5버젼을 쓰면된다.

AddType application/x-httpd-php .html .php은 항시 동일함으로 그대로 똑같이 써주면된다.
어떤 형태를 컴파일해서 웹페이지로 전환할것인가에 대한 설정이다.
뒤에 값들은 확장자로써 .html과 .php만 컴파일 하겠다는 이야기다.
그리고 index.php 파일을 자동으로 인식해서 페이지를 띄워주거나 하는게 안되어있고 index.html만 기본으로 설정되어있는데 아래 구문을 찾아 변경해주면된다.

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

이제 아파치를 윈도우즈 서비스에 등록해주면 php와 아파치의 설치는 끝이다.
명령프롬프트 창을 열고 아래와 같이 입력한다.

C:\Apache24\bin\httpd.exe -k install

당연한 이야기겠지만 C:\Apach24\ 부분은 설치한 경로에따라 달라질수있다.
만약 서비스 등록이 제대로 되지 않는다면 명령프롬프트를 관리가 권한으로 실행하여 입력해주면 성공적으로 등록이 된다.(아마 관리자 권한으로 해야 등록이 될것이다. 그냥 열어서는 서비스 등록이 정상적으로 되지 않는다.)

추가
Visual Studio 재배포 패키지가 설치되지 않으면 vcruntime140.dll을 찾을수 없다면서 에러를 내뿜는데 아래의 페이지로 이동하여 재배포 패키지를 받아서 설치하면 해결된다.

조금 무식한 방법으로 비주얼 스튜디오 최신버젼을 그냥 깔아버려도 해결할수 있다....(참고로 비주얼 스튜디오 2015 커뮤니티 에디션은 무상 제공됨으로 윈도우 개발환경 구축도 하고 겸사겸사(?)서버 셋팅도 해줄수있다.)
서비스가 제대로 등록되었는지 확인하려면 제어판 - 시스템 및 보안 - 관리 도구에 "서비스" 항목을 열어서 확인할수있다.


마리아 DB 설정
mysqld.exe를 관리자 권한으로 실행한다.
아파치 서버의 상태를 모니터링 할려면 C:\Apache24\bin\ApachMonitor.exe를 실행시키면 된다.
이걸로 서버를 정지시키거나 재시작, 시작시키는게 가능하다.(만약 정상작동하지 않는다면 관리자 권한으로 실행)
보여질 웹페이지는 아파치 폴더안에 htdocs 폴더(C:\Apache24\htdocs)안에 넣어두면 되며, 최상위에 둘경우 도메인 주소/파일이름.확장자로 입력하면 된다.(ex: http://localhost:80/index.php)

아래는 DB커넥션 테스트를 위한 코드이다.
dbcontest.php

<?php
$s = mysqli_connect("localhost", "루트계정", "비밀번호") or die("실패입니다");
print "성공입니다";
mysqli_close($s);
?>

​ "루트계정", "비밀번호"는 자신이 DB설치시에 설정했던 계정과 비밀번호를 넣으면된다.
만약 따로 설정하지 않았다면 디폴트는 "root", "" 이다.
성공입니다. 라고 뜰경우 DB와 정상적으로 통신이 가능한것이고 실패입니다 라고 뜰경우 설정을 다시 점검해볼필요가 있다.


httpd 아파치를 사용할경우 php7 curl 확장기능 라이브러리 호환성문제.
httpd 아파치의 Logs 폴더에 error.log 라는 파일을 열어보면 아래와 같은 구문이 보인다.

PHP Warning:  PHP Startup: Unable to load dynamic library 'c:\\php7\\ext\\php_curl.dll' - \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xc3\xa3\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xcf\xb4\xef\xbf\xbd.\r\n in Unknown on line 0

위와 같은 문제가 생길경우 아래와 같이 조치해준다.
단, 64비트 버젼에서만 가능하며 32비트 버젼에서는 아래의 방법으로는 해결할수 없었다.
php를 설치한 폴더에 보면 아래와 같은 파일이 루트 디렉터리에 있다.

libeay32.dll, libssh2.dll, ssleay32.dll

위 파일들을 복사하여 httpd 아파치의 bin 폴더안에 넣어주면 기존의 파일을 덮어쓰겠냐는 안내가 나오는데 전부 덮어쓰기 해준뒤에 실행중인 httpd 아파치를 종료후 재실행 해준다.


'긍정곰의개발일지 > PHP' 카테고리의 다른 글

PHP - 파일업로드 용량제한 설정  (0) 2017.10.05
PHP - phpmyadmin 설치  (0) 2017.10.05
PHP - shuffle 함수  (0) 2017.10.05
PHP - rand 함수  (0) 2017.10.05
PHP - Windows + nginx + PHP7 + MariaDB 서버구축  (0) 2017.10.05
Comments