Programming/PHP

Apache + PHP :: 윈도우(Window) 연동하여 웹개발 시작하기

고고마코드 2021. 12. 9. 10:44
반응형

Apache 와 PHP를 연동하여 웹개발을 시작하기 위한 기초 개발환경을 설정하는 과정이다.
개발환경 : Window 10 64bit, Apache 2.4.51, PHP7.4 (7.4.26)


Apache 설치

다운로드 경로로 이동

Apache VS16 binaries and modules download (apachelounge.com)

아파치 최신 버전 설치

자신의 운영체제에 맞는 Zip 파일을 다운로드 받으면 된다.

나는 Window 64비트 이므로 Apache 2.4.5 Wind64를 다운로드 한다.

압축 해제 후 "Apache24" 폴더만 원하는 경로로 이동

예) C:\\Program Files\\Apache24


PHP 설치

다운로드 경로로 이동

PHP For Windows: Binaries and sources Releases

PHP7 최신 버전 설치

Non Thread Safe 버전을 다운로드 하면 추후 과정에서 오류가 발생할 수 있다. (아래에서 다시 설명)

자신의 운영체제에 맞는 Thread Safe 버전의 Zip 파일을 다운로드 한다.

나는 Window 64비트이므로 VC15 x64 Thread Safe 를 다운로드 한다.

압축 해제 후 원하는 경로로 이동

다운로드 받은 파일을 알아서 압축풀기하면 폴더명이 길게 생성된다.

추후 설정 과정에서 불편함을 줄이기 위해 해당 폴더명을 수정한다.

예) php-7.4.26-Win32-vc15-x64 -> php-7.4.26

해당 폴더를 원하는 경로로 이동한다.

예) C:\\Program Files\\php-7.4.26


httpd.conf 파일 수정

설치는 끝났고 지금부터 하는 작업은 나의 환경에 맞게 개발환경을 설정하는 과정이다.

Apache의 httpd.conf 파일을 수정할 것이고 해당 파일을 Apache 설치 마지막 과정에서 이동시킨 폴더에 있다.

나는 Apache 폴더를 C:\\Program Files\\Apache24 로 이동시켰으니 아래 경로로 이동하면 해당 파일이 있다.

경로) C:\\Program Files\\Apache24\\conf\\httpd.conf

SRVROOT 설정

Apache24를 저장한 경로에 맞게 SRVROOT 를 수정한다.

#Define SRVROOT "c:/Apache24"
Define SRVROOT "C:/Program Files/Apache24"

PHP 경로 설정 및 모듈 연동

하단에 코드 추가

PHPIniDir "C:/Program Files/php-7.4.26" #php 설치 마지막 과정에서 이동시킨 폴더 경로
LoadModule php7_module "C:/Program Files/php-7.4.26/php7apache2_4.dll" #Apache를 통해서 PHP를 사용하기 위해 필요한 모듈
AddType application/x-httpd-php .html .php #html, php 확장자를 php 로 인식
AddHandler application/x-httpd-php .php #여러 버전의 php를 동시에 사용할 경우 각 php 버전에 맞게 수정

ServerName, Listen 설정

ServerName 검색 후 원하는 도메인으로 수정 (별도 도메인 없이 테스트 하기 위해서는 localhost)

Listen 검색해서 포트번호 수정

#ServerName 도메인 또는 IP주소:포트번호
#포트번호는 생략 가능, 생략하면 http 포트 번호(80)를 사용한다
#ServerName www.example.com:80 
ServerName localhost 

#Listen IP주소:포트번호, IP주소는 생략 가능
#Listen 12.34.56.78:80
#Listen 8080 #서버 전체 8080포트 사용
Listen 80 #서버 전체 80포트 사용

DirectoryIndex 설정

DirectoryIndex 검색 후 내용 수정

DirectoryIndex는 클라이언트가 파일명을 생략하고 도메인만 입력한 경우 어떤 파일을 반환할 지 정하는 것이다.

하나 이상의 파일명을 지정할 수 있으며 지정한 순서대로 존재여부에 따라 반환한다.

<IfModule dir_module>
    #DirectoryIndex index.html
    DirectoryIndex index.php index.html #index.php 반환, 만약 없다면 index.html 반환
</IfModule>

위처럼 설정하면 localhost 요청 시 자동으로 index.php 가 반환되고 만약 index.php 가 없다면 index.html 을 반환한다.


php.ini 생성

php 폴더가 저장되어 있는 경로로 이동

예) C:\\Program Files\\php-7.4.26

해당 경로에는 php.ini-production 파일이 있는데, 이 파일을 복사해서 파일명을 php.ini 로 수정한다.

해당 과정을 하는 이유는 php 설정에 필요한 config 파일을 Apache 에 연동하기 위한 작업이다.

만약 php.ini 를 생성하지 않으면 아래와 같이 config 파일을 인식하지 못한다.


Apache 실행하기 (install, uninstall, start, stop)

Apache 경로로 이동

명령프롬포트(CMD)를 관리자 권한으로 실행 후 Apache/bin 경로로 이동

cd C:\Program Files\Apache24\bin

서비스 명령어

httpd -k install #서비스 설치
httpd -k start #서비스 시작
httpd -k stop #서비스 종료
httpd -k uninstall #서비스 제거

설치~제거 과정

만약 서비스 작업하면서 오류가 발생한다면 아래 순서대로 다시 시작하면 된다.

서비스 중지 -> 서비스 제거 -> 서비스 설치 -> 서비스 시작


환경변수 설정으로 간편하게 Apache 명령어 사용

매번 Apache24/bin 경로로 이동하기 불편하기에 cmd를 열자마자 명령어를 사용하려면 환경변수 설정을 하면 된다.

시스템 환경 변수 열기 [시스템 환경 변수 편집 > 시스템 속성 > 고급 > 환경 변수]

시스템변수에 Path를 찾아 편집클릭

새로 만들기 선택 후 Apache24/bin 경로C:\\Program Files\\Apache24\\bin 입력 후 저장

명령프롬포트(CMD)에서 경로 이동 없이 바로 명령어 사용하여 확인


PHP 연동 확인하기

php 파일 생성

httpd.conf 에서 설정한 DocumentRoot 경로에 아래 코드를 입력해서 phpinfo.php 파일 저장

별도 수정하지 않았다면 Apache24/htdocs 해당 경로에 있음.

예) C:\\Program Files\\Apache24\\htdocs

<?php
phpinfo();
?>

phpinfo 확인

브라우저를 열어 URL에 localhost/phpinfo.php 입력

위처럼 phpinfo 가 정상적으로 나오면 Apache + PHP 설치 완료

만약 디렉토리를 변경하고 싶다면 DocumentRoot 와 Directory 를 원하는 경로로 변경하면 된다.


설치과정에서 만난 오류들

SRVROOT 오류

SRVROOT 기본 경로는 "C:/Apache24" 이다.

SRVROOT 경로를 제대로 지정해주지 않아서 발생한 오류

  • Define SRVROOT C:/Program Files/Apache24 로 변경하여 해결

php7apache2_4.dll cannot load

PHP7 설치 시 x64 Non Thread Safe 로 다운 받아서 발생한 오류

x64 Thread Safe 를 다운 받으면 php7apache2\_4.dll 파일도 같이 생성된다.

Non Thread Safe 와 Thread Safe 의 차이점은 아래 블로그에 잘 정리되어 있다.

https://mkklab.tistory.com/8

Set the 'ServerName' directive globally to suppress this message

ServerName 을 설정하지 않아서 발생한 오류

처음 세팅 시 localhost 도 등록되어 있지 않으니 ServerName 을 입력해야 한다.


반응형