본문 바로가기
기술/PHP

윈도우(Windows)에서 PHP8 (8.0.0 beta2)을 컴파일하고 빌드하는 방법을 알아보자! #php8 베타2 다운로드

by 포도빛 2020. 8. 29.

윈도우용 php 8 beta2 다운로드만 받으러 오신분께:

이 글에 첨부한 php8은 php 8.0.0 beta2이며 실서버용으로 사용이 불가능하며 테스트용도로만 사용되는 버전입니다.

첨부파일은 글 맨 아래에 있으니 내용은 생략하셔도 되십니다.

 

 

먼저 PHP 공식 홈페이지에 있는 PHP 7.x까지는 마이크로소프트(Microsoft)가 PHP의 소스를 직접 빌드하고 나온 사전 빌드된(Prebuilt) 패키지를 PHP 공식 홈페이지에 배포해주었었다. 따라서 윈도우 사용자는 PHP 공식 다운로드 페이지에서 간편하게 내려받고 바로 실행할 수 있는 형태였었다.

 

PHP 공식 홈페이지에 PHP 8.0.0 베타2가 릴리즈 되었음을 알려주고 있다. 소스코드만 제공된다.

 

그러나 PHP8 부터는 마이크로소프트의 빌드 지원이 없어지기 때문에 윈도우에서는 앞으로 사전 빌드된 패키지가 지원되지 않기 때문에 이번 글에서는 윈도우에서 PHP8을 직접 빌드하고 사용해보는 시간을 가져보려고 한다.

 

(예상을 하나 하자면 굳이 직접 빌드할 필요없이 흔히 번들로 제공해주는 수많은 APM 패키지들(비트나미=bitnami, XAMPP 등)에서 자체 빌드하여 제공을 해주겠지만...)

 

먼저 PHP를 빌드하는 step-by-step(한단계 한단계 따라하기) 방법을 알아보기 위해 PHP 공식 홈페이지의 wiki를 참고하자.

 

PHP: internals:windows:stepbystepbuild_sdk_2

Build your own PHP on Windows This tutorial concerns the new PHP SDK and PHP 7.2 and later, while the described PHP SDK is compatible with at least PHP 7.0. To build PHP prior to 7.0, or if you experience issues building PHP lower than 7.2 with the new PHP

wiki.php.net

이 아래부터는 바로 위 페이지의 가이드를 직접 하나씩 따라해보며 진행할 것이다.

 

# 요구사항(필요한 것들)

윈도우에서 PHP를 빌드하려면 3가지 사항이 요구된다.

일부 파일은 블로그 본문에 사용했던 파일을 직접 올려두지만 가능하면 공식 홈페이지에서 직접 다운로드 받자!

 

1. 잘 구성된 환경(컴파일러, PHP SDK)

 

    (1) 윈도우용 PHP 소스 컴파일에 사용되는 컴파일러는 마이크로소프트의 Visual C++ 컴파일러만 지원한다고 한다. PHP8을 git의 'master' branch로 판단하였을때 최소한 Visual Studio 2019 사용을 권장한다. 개인/비상업/비영리는 VS Community 에디션 라이선스를 사용할 수 있으므로 설치해도 무방하다. VS 공식 홈페이지( https://visualstudio.microsoft.com/ko )

vs_community.exe
1.33MB

 

    (2) PHP SDK는 이 링크(https://github.com/Microsoft/php-sdk-binary-tools)에 접속 후 나타나는 화면의 중앙에서 상단 또는 우측에 Release가 있을 것이다. 이 Release를 클릭한 후 최신 버전을 다운로드 받은 다음 적절한 디렉토리(폴더)에 압축을 풀자.

php_sdk_220.z01
9.77MB
php_sdk_220.z02
9.77MB
php_sdk_220.z03
9.77MB
php_sdk_220.zip
1.93MB

 

2. PHP에서 사용되는 미리 빌드된(prebuilt) 라이브러리, 서드파티(3rd party = 외부) 라이브러리 / 종속 라이브러리

 

    만약 우리가 리눅스를 사용하고 있다면 패키지 관리자(apt, yum, dnf 등)를 사용하여 쉽게 운영체제에 맞는 사전 빌드된 라이브러리를 설치할 수 있지만 윈도우이기 때문에 사전 빌드된 라이브러리를 찾기 어려울 것이다. 다행히도 PHP에서 사용되는 라이브러리들은 모두 PHP 공식 페이지에서 제공을 해주고 있다.

 

    이곳에서 자신이 사용하는 버전에 맞게 접근하여 필요한 라이브러리를 다운로드 받아야 한다. 우리는 Visual Studio 2019(16.x)이니 먼저 vs16 디렉토리를 접근한 다음, 빌드를 하고 싶은 아키텍처(필자는 64비트)인 x64 디렉토리에서 모든 라이브러리를 다운로드 받자.

 

    다운로드 받기전 알아야 할 사실: 아래에서 소개할 PHP 빌드 환경 설정 중에 라이브러리를 자동으로 다운로드 받는 방법도 있다.

 

    링크: https://windows.php.net/downloads/php-sdk/deps/

    

deps.z01
9.77MB
deps.z02
9.77MB
deps.z03
9.77MB
deps.z04
9.77MB
deps.z05
9.77MB
deps.z06
9.77MB
deps.z07
9.77MB
deps.z08
9.77MB
deps.zip
8.98MB

3. PHP 소스

 

    우리는 PHP 8.0.0 beta2를 빌드할 것이므로 PHP 8.0.0 beta2 소스코드를 다운로드 받자.

    공식 다운로드 페이지 : https://downloads.php.net/~pollita/

 

    이곳에서 tar.bz, tar.gz, tar.xz중 하나만 다운로드 받고 적절한 위치에 압축을 풀자. 필자는 php-8.0.0beta2.tar.gz을 선택하였다.

 

    asc 파일은 다운로드 받은 파일이 올바르게 다운로드 되었는지(다운로드 중에 깨지지 않았는지, 해커가 변조하지 않았는지) 확인하기 위해 사용되는 체크섬 파일이다. 이 글에서는 asc 파일로 올바르게 받았는지 검증하는 방법은 다루지 않는다.

 

php-8.0.0beta2.z01
9.77MB
php-8.0.0beta2.zip
6.15MB

 

# 빌드 디렉토리 구성 갖추기

이제 빌드 환경을 갖춰볼 시간이 됐다. (PHP 공식 가이드의 Setup the build directory 파트)

 

여러분들이 위에서 다운로드 받은 SDK, 라이브러리, 소스코드를 어느 곳에 압축을 풀었는지 알 수는 없지만 필자의 경우 다음 그림과 같은 구조로 압축을 풀었다.

 

 

이제 공식 가이드처럼 따라해보자

 

1. PHP SDK 설정

 

    (1) PHP SDK 디렉토리(=폴더)를 만든다. (예를들어 C:\php\phpsdk2)

 

    (2) 위에서 만든 디렉토리에 'PHP SDK 바이너리 툴즈'의 압축을 푼다. (이 디렉토리에는 bin, lib, msys2라는 3개의 디렉토리가 존재해야 한다)

 

 

2. 명령 프롬프트(cmd)를 열고 PHP SDK 디렉토리에 접근한다.

 

명령어 [cd C:\php\phpsdk2]

3. starter 스크립트를 실행(invoke)한다.

 

    주의할 것은 앞으로 나오는 모든 명령어는 이 starter 스크립트가 실행된 명령 프롬프트 안에서 입력되어야 한다.

 

    필자는 Visual Studio 2019 64비트를 사용하므로 'phpsdk-vs16-x64.bat'을 입력할 것이다.

 

이렇게 나올 것이다.

4. phpsdk_buildtree 배치 스크립트를 실행하여 원하는 디렉토리 구조를 만든다.

 

    필자는 php8dev 디렉토리 구조로 만들었다.

 

명령어 [phpsdk_buildtree php8dev]

5. phpsdk_buildtree 스크립트는 [2]에서 실행된 버전의 디렉토리를 새로 만들게 된다

 

잘 만들어졌는지 확인해보자.

6. PHP 소스 코드를 [5]에서 만들어진 디렉토리에 압축을 푼다. (이미 압축을 풀었으면 복사 or 이동하자)

 

    PHPSDK디렉토리 ->

    [4]에서 만든 이름 (= php8dev) ->

    [3]에서 선택한 Visual Studio(C++) 버전 (= vs16) ->

    [3]에서 선택한 아키텍쳐 (= x64)

 

    이곳에 php 소스 디렉토리가 남겨지게끔 한다.

 

이런 구조로 남아야 한다.

7. [6]에서의 소스 디렉토리가 존재하는 디렉토리에 deps라는 디렉토리가 존재하는 것이 확인되는데, 아래 2가지중 하나를 선택해서 수행한다.

 

    PHP 공식 가이드에서의 첫번째 방법이 이곳에서 두번째 방법이다.

    혹시나 이 글을 보고 라이브러리를 이미 수동으로 받았을 가능성이 있어서 순서를 바꾸었다.

 

    첫번째 방법: 라이브러리를 수동으로 다운로드 받아 설정하기

    (1) 수동으로 모든 라이브러리를 모두 다운로드 받는다. (이미 위쪽에서 했을 것이다.)

    (2) 다운로드 받은 라이브러리의 압축을 모두 해제한다. 반드시 [6]에서 보이는 deps 디렉토리에 압축을 풀어주자

        필자의 빌드 환경 수정의 디렉토리 구조처럼 [작업디렉토리\deps\include]와 [작업디렉토리\deps\lib]같이 있도록말이다.

 

        만약에 아래와 같은 구조면 잘못된 것이니 한 디렉토리에 뭉쳐주자.

        [작업경로\deps\라이브러리1\include], [작업디렉토리\deps\라이브러리1\lib],

        [작업경로\deps\라이브러리2\include], [작업디렉토리\deps\라이브러리2\lib],

        ...

 

    두번째 방법: 라이브러리를 자동으로 다운로드 받아 설정하기

 

    명령 프롬프트에서 php 소스 디렉토리로 이동한 다음, [phpsdk_deps -u] 명령어를 입력한다.

    입력한 전체 명령어:

        $ cd C:\php\phpsdk2\php8dev\vs16\x64\php8source

        $ phpsdk_deps -u

 

명령어를 입력하면 이 화면과 같이 자동으로 라이브러리를 다운로드 받고 압축을 풀어준다.

 

여기까지 했다면 빌드 디렉토리 구성 갖추기(Setup the build directory)는 끝이났다.

 

# 컴파일 및 빌드

알아야 할 사실: 현재(2020년 8월 29일) PHP SDK Starter에서는 크로스 빌드를 지원하지 않는다고 한다. (한번에 x64와 x86의 빌드라던가...)

 

1. starter 스크립트를 실행한다. (빌드 디렉토리 구성 갗추기의 3과 같다.)

 

    이미 실행중인 상태면 당연히 또 할 필요는 없고 반드시 starter 스크립트에서 진행되어야 하기 때문에 가이드에 있는 것 같다.

   

    명령어:

    > cd C:\php\phpsdk2

    > phpsdk-vs16-x64.bat

 

2. php 소스코드 디렉토리로 이동한다.

 

    명령어:

    $ cd C:\php\phpsdk2\php8dev\vs16\x64\php8source

 

3. buildconf를 실행한다.

    $ buildconf

 

실행하니 configure.js를 재빌드하고 configure --help를 실행할 수 있다고 알려준다.

4. 컴파일 플래그를 알기 위해서는 다음 명령어를 입력하여 알아볼 수 있다.

    $ configure --help

 

플래그들이 많다.

5. 자신의 configure 명령어를 만든다.

    

    [4]에서 확인한 플래그를 설정하면 해당 플래그에 맞는 내용으로 빌드를 할 수 있다.

 

    $ configure --disable-all --enable-cli (기타등등)

    (당연히 기타등등 그대로 치면 안되고 꼭 [4]에서 확인한 플래그를 붙여나가면서 해보자.

 

    필자는 아래와 같은 명령어를 사용했다.

    무슨 내용인지는 [4]에서 나타나는 내용들로 확인해보자.

    $ configure --enable-snapshot-build --enable-debug-pack --disable-zts

 

무수히 많은 내용이 나오고 최종적으로는 이런 화면이 될 것이다. 중간에 자신이 활성화한 플래그들 정보도 나오므로 결과를 확인해보도록 하자.

 

6. 이제 빌드를 하기 위해 아래 명령어를 입력한다.

    $ nmake

 

    시간이 다소 소요되므로 기다려주자.

 

열심히 빌드를 하고 있다.

 

빌드가 끝나면 커서가 깜박거릴 것이다.

 

7. 만약에 빌드된 PHP와 확장(extension: 익스텐션)을 압축하려면 [6]이 완료된 이후에 아래 명령어를 입력한다.

    $ nmake snap

 

    이 명령어 또한 시간이 다소 소요된다.

 

    필자는 압축을 하는 것을 추천한다. 왜냐하면 빌드 이후 디렉토리에는 컴파일 과정에서 있던 목적프로그램(.obj 파일)들은 단독적으로 실행할 수도 없고, 그 파일의 양도 많기 때문에 실행에 필요한(실행 가능 파일=EXE과 외부 라이브러리=DLL) 파일만 따로 묶어주므로 다른 곳으로의 배포에 용이하다.

 

8. 컴파일 및 빌드된 결과는 아래 위치에 저장된다.

    32비트의 경우 (x86)

    여기까지 작업한 PHP 소스코드 디렉토리 -> Release 또는 ReleaseTS

    

    64비트의 경우 (x64)

    여기까지 작업한 PHP 소스코드 디렉토리 -> x64 -> Release 또는 ReleaseTS

 

    만약 Non-thread-safe하게 컴파일 및 빌드했다면 (configure의 플래그에 --disable-zts를 넣은 경우) Release 디렉토리이고,

    Thread-safe하게 컴파일 및 빌드했다면 ReleaseTS 디렉토리이다.

 

    그리고 [7]에서 압축한 결과물도 같은 디렉토리에 zip 파일 형식으로 저장된다.

 

 

이렇게하면 PHP 8.0.0 베타2의 컴파일 및 빌드가 완성되고 PHP 8.0.0 베타2를 바로 사용해볼 수 있다.

 

 

빌드된 파일들과 CUI 환경으로 phpinfo()를 출력한 결과. (PHP 8.0.0 beta2 NTS)

 

Apache 2.4와 php 8.0.0 beta2를 연동하여 phpinfo()를 출력한 결과 (PHP 8.0.0 beta2)

 

만약 소스에서 무언가를 수정했거나 configure를 다시 하여 재컴파일(재빌드)를 하고 싶으면 아래 명령어를 순서대로 입력하면 된다.

 

    기존 컴파일 및 빌드된 파일 정리

    $ nmake clean

 

    buildconf 강제 재설정

    $ buildconf --force

 

    플래그 재설정

    $ configure <플래그>

 

    컴파일 및 빌드

    $ nmake

 

여기까지 하면서 필자가 빌드한 PHP 8.0.0 베타2 바이너리를 아래에 첨부하였다.

 

빌드 환경은 이 글에 나타난대로 VS16(2019) x64임에 유의하고, Release.zip는 NTS(non-thread-safe), ReleaseTS.zip은 TS(thread-safe)이다.

 

그리고 PHP 공식 홈페이지에서는 PHP 8.0.0 베타2를 production 환경(실제 서비스 환경)에서 사용하면 안되고 반드시 테스트용으로만 사용을 권장하고 있다.

 

경고:

누군가가 빌드한 프로그램을 사용할때는 반드시 직접 바이러스(악성코드)를 검사한 후에,

그 사람을 신뢰할 수 있는 경우에만 사용할 것.

또 가능하면 샌드박스 환경 또는 가상머신 환경에서의 실행을 추천함.

 

Non-Thread-Safe (IIS 또는 Nginx에 적합. Apache에서는 cgi로만 가능)

Release.z01
9.77MB
Release.z02
9.77MB
Release.z03
9.77MB
Release.z04
9.77MB
Release.z05
9.77MB
Release.zip
8.35MB

 

Thread-Safe (Apache 2.4.x용 모듈이 있으며 모듈명은 'php_module'임에 유의)

Release_TS.z01
9.77MB
Release_TS.z02
9.77MB
Release_TS.z03
9.77MB
Release_TS.z04
9.77MB
Release_TS.z05
9.77MB
Release_TS.zip
8.51MB

댓글