본문 바로가기
server

[LAMP 서버구축]PHP 7.4 수동설치(컴파일 설치)

by 윈 Win 2021. 2. 14.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[LAMP] PHP 7.4 수동설치(컴파일 설치) — Win Record (tistory.com)

 

 


 

공식홈페이지의 다운로드 문서에 방법이 자세히 나와있다.

작업 흐름

PHP 버전 선택하기

의존성 패키지 설치

PHP 설치

Apache - PHP 연동

 

설치환경 : Ubuntu 20.04, Apache2.4.46

 

 


PHP 버전 선택하기

PHP에는 버전이 여러가지 존재한다. 버전에 따라 의존성 패키지의 필요 조건도 달라지기 때문에, 어떤 버전을 설치할지 선택해야 한다.

작성일(2021.02.14) 기준 사용 가능한 버전은 세가지이다. PHP 홈페이지에 가면 현재 기준 지원되는 버전을 확인할 수 있다. (최신버전 확인하기)

  • 7.3.x 
  • 7.4.x
  • 8.0.x

PHP: Supported Versions

보안관련 지원만 되는 7.3을 제외하고, 7.4와 8.0 중 하나를 설치하기로 했다.

이전과 달리 PHP 8.0의 강점은 크게 두 가지이다.

1. 간결하고 편리해진 문법

변수 유형을 여러 개로 지정 가능한 유니온형 지원, 속성값을 생성자 인자 안에 명시해주면 되는 간편해진 클래스 생성자, match표현식(간결한 switch), 인자 별명 붙이기 등 

2. JIT 도입으로 빨라진 속도

JIT(just in time)는 기계어로 변환된 코드를 미리 저장하여 프로그램을 실행할 때 그 속도가 보다 빨라지게 한다. php가 사용하는 인터프리터 방식(프로그램을 실행할 때마다 코드를 기계어로 변환)에 컴파일러 방식(미리 프로그램 전체를 기계어로 변환)의 장점을 추가한 느낌이라고 이해하였다.

이를 통해 계산이 많이 필요한 작업, 즉, CPU 직약적 프로그램인 머신러닝, 복잡한 수학계산, 이미지 프로세싱·모델링 등의 방면에서는 속도가 엄청나게 향상되었다.

 

각종 벤치마크 결과, php7.4와 php8.0간에는 근소한 차이로 php8.0이 우세하지만 php8.0과 JIT를 같이 사용할 때에는 php7.4보다 배 이상의 우수한 점수를 보여준다.

프렉탈 계산을 할 때 php 7과 8의 속도 차이

 

하지만 php 7.4를 설치하기로 했다. 이유는 다음과 같다.

1. 최근에 출시 되었다.

정식 출시(20.12.26)가 2달도 채 되지 않았다. 따라서 관련 라이브러리나 플러그인이 제대로 지원될 지 미지수이다. 또한 삭제된 함수와 기능들이 이전 버전(php 7)과 달리 어떤 영향을 줄지 알 수 없어 안정성이 우려된다. 혼자 공부하는 용도로는 좋겠지만 직접 서비스를 만들어보아야 하기 때문에 혹시 몰라 7.4를 사용하기로 했다.

2. 문법이 많이 바뀌었다.

php를 다뤄보았던 사람에게는 작은 변화이며 바뀐 문법이 편리하다며 극찬하는 글이 많지만, 이제 막 공부하는 입장에서는 수많은 php7기반 예제코드와 바뀐 php8 문법을 모두 공부해 프로젝트에 적용할 깜냥이 되지 않는다.

3. 속도면 큰 변화가 기대되지 않는다.

php 8을 사용하는 이유는 단연 속도가 큰 이유일 것이다. 물론 JIT과 함께 사용해 속도 및 성능이 매우 좋아진다. 하지만, 단순히 화면을 보여주고, 쿼리작업으로 시간이 걸리는 일반적인 웹서비스에는 JIT 도입 전후 성능차이가 크게 없을 것이다.

 

따라서 JIT 사용이라는 장점이 현재 나에겐 해당되지 않고, 안정성이 불분명하며 관련 커뮤니티나 소스들이 빈약한 php 8을 굳이 사용해야 할 필요성을 느끼지 못했다.

"php를 사용하는 목적" + "지식의 수준"을 고려했을 때, 아직은 php7.4가 더 적합하다는 결론을 내렸다.

php 8이 나쁘다는 것이 아니다. 실제로 8에서의 문법과 추가된 기능이 더 좋아보여 여건만 된다면 8도 써보고 싶다는 생각이 계속 들었다.

 

 


의존성 패키지 설치하기

공식문서에 설치 전 요구사항이 있다. (공식문서 다운로드 / 공식문서 온라인으로 보기)

1. 컴파일을 위한 사전지식 및 소프트웨어

  • 기초 유닉스 스킬
  • ANSI C compiler
  • 웹서버
  • 모델 컴포넌트(GD, PDF, libs 등)

2. 사전 요구사항(의존성 패키지)

  • autoconf 2.64 이상
  • automake 1.4 이상
  • libtool 1.4 이상
  • re2c 0.13.4 이상
  • bison 3.0 이상

의존성 버전 확인하기

$ autoconf --version
$ automake --version
$ libtool --version
$ re2c -v // --version을 사용해도 된다.
$ bison --version

버전을 확인했는데 아래와 같이 메시지가 나오면 해당 패키지를 다운받으면 된다.

 

혹시 모르니 다운로드 후 버전 체크를 해보는 것을 추천한다.

 

의존성 패키지 외에도 환경설정(configure) 할 때 특정 패키지가 필요하다. 미리 받아두자.

# apt-get install libsqlite3-dev
# apt-get install libpng-dev
# apt-get install libjpeg-dev

 

 


PHP 7.4 설치하기

작성일(21.02.14)기준 PHP 7.4 최신버전인 PHP 7.4.15를 설치한다.

$ sudo su
# cd /usr/local
# wget https://www.php.net/distributions/php-7.4.15.tar.gz // 압축파일 다운로드
# tar xvfz php-7.4.15.tar.gz // 압축파일 해제

# cd php-7.4.15
# ./configure --with-apxs2=/usr/local/apache/bin/apxs \
--enable-mysqlnd --with-mysql-sock=mysqlnd \
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-imap-ssl --with-iconv --enable-gd \
--with-jpeg --with-libxml --with-openssl

 

 

이런 메시지가 나오면 환경설정(configure)이 완료된 것이다.

 

이후 설치를 진행한다.

// 한번에 하는 명령어
# make && make test && make install

// 또는 따로따로 하기
# make // 10분정도 걸린다
# make test // 8분정도 걸린다
# make install

make test가 끝나면 결과 요약본이 나온다.

make test 완료 후

실패한 테스트가 있을 경우 해당 테스트의 목록과 아래와 같은 메시지를 보여주는데, 구글링(QnA글1 / QnA글2 / 블로그글)을 해보아도 해당 문제에 대한 특별한 대체방법이 없었다. 이유 또한 알지 못했고, 그저 무시하고 넘어가라는 글과 답변이 있어 별다른 액션을 하지 않고 make install을 진행했다. 혹시 몰라 Y를 입력해 해당 레포트를 보내긴 하였다.

make test 메시지

make install 까지 끝나면 아래와 같이 된다.

아파치 모듈 디렉토리에서 php so 파일 설치여부를 확인한다.

DSO(Dynamic Shared Object, 동적 공유 객체) 방식으로 설치된 아파치이기 때문에, 새 모듈이 추가될 때마다 재컴파일하는 것이 아닌 외부에서 기능을 필요할 때마다 동적으로 호출한다. PHP 또한 대부분 DSO 모듈 방식이다.

# ls /usr/local/apache/modules -l // -l : 길게(세부사항) 보기

 

 

 


Apache - PHP 연동하기

작업 흐름

아파치 설정파일 AddType 추가

php.ini 파일 세팅

테스트용 php 파일 생성

연동 확인

아파치 설정파일 수정(AddType 추가)

아파치 설정파일(httpd.conf)을 열어 PHP모듈 설치 여부를 확인한다.

# vi /usr/local/apache/conf/httpd.conf // 아파치 설정파일 열기

 

키보드의 h(←), j(↓), k(↑), l(→) 키를 눌러 LoadModule php7_module modules/libphp7.so를 찾는다. 

 

PHP 모듈이 설치된 것을 확인했으니 문서 내 mime_module에 타입을 추가(AddType)한다.

a나 i를 눌러 편집모드로 전환할 수 있다.

AddType application/x-httpd-php .php .html

 

 

추가가 완료되면 ESC를 누른 후 :wp를 입력해 저장 후 종료작업을 한다.

php.ini 파일 세팅

공식문서의 설명대로 php.ini파일을 셋업해준다.

 

# cp /usr/local/php-7.4.15/php.ini-production /usr/local/lib/php.ini

/usr/local/php-7.4.15/php.ini-production 파일을 /usr/local/lib 디렉토리 안의 php.ini파일로 복사한다.

/usr/local/lib 디렉토리를 확인하면 php.ini 파일이 추가된 것을 확인할 수 있다.

# ls /usr/local/lib

 

테스트용 php 파일 생성

$ cd /usr/local/apache/htdocs // 아파치 웹 콘텐츠 디렉토리로 이동
$ sudo vi phpinfo.php // php.info 생성 및 파일 열기

line 2에서 sudo 를 앞에 꼭 붙이거나 이전에 root 계정으로 전환해야 한다. root 계정으로 vim 편집기를 열어야 파일을 생성 및 수정할 수 있기 때문이다.

 

vim 편집기를 열면 새로운 창이 나타난다. a를 눌러 편집모드로 전환해 아래 코드를 입력한다.

입력 후엔 ESC를 눌러 편집모드를 빠져나가고 :wq를 입력해 저장한다.

<? php
phpinfo();
?>

 

PHP 연동 확인하기

아파치를 실행해 PHP연동을 확인한다.

$ sudo su
# httpd -k start // apache 실행
# ps -ef | grep httpd
# netstat -anp | grep httpd
# curl http://127.0.0.1/phpinfo.php
# httpd -k stop // apache 종료

 

 

+) httpd: command not found 에러 발생 시

~/.bashrc에 alias로 httpd=/usr/local/apache/bin/httpd를 등록해주면 된다.

$ sudo su
# vi ~/.bashrc // .bashrc 파일 열기

// .bashrc 파일 內
alias httpd=/usr/local/apache/bin/httpd
// ESC 후 :wq입력해 저장

# source ~/.bashrc // 변경사항 반영
# alias // 저장된 alias 조회

 

alias 조회목록

+) 아파치를 실행 및 종료할 때 아래와 같이 AH00558 에러 발생 시

[error] AH00558: httpd: Could not reliably ... (tistory.com)

 

[error] AH00558: httpd: Could not reliably ...

문제 상황 아파치를 실행 또는 종료할 때 아래와 같이 에러가 발생한다. 서버이름이 없어 생기는 에러이다. 따라서 서버 이름만 명시해주면 발생하지 않는다. 해결 $ sudo su # find / -name 'httpd.conf' /

teamblog.tistory.com

 

 


이전 글

[LAMP 서버구축]MySQL 수동설치(컴파일설치) (tistory.com)

 


참고자료

PHP: Download documentation

PHP 8.0 JIT Is Offering Very Compelling Performance Ahead Of Its Alpha - Phoronix

PHP 8.0 and 7.4 benchmarks on Symfony: JIT boost up to +9% with OPCache Preload (ibexa.co)

APM 컴파일 설치하기 - PHP | sangminlog (sangm1n.github.io)

Ubuntu 18.04 + Apache 2.4.41 + PHP 7.4.1 수동설치하기 (tistory.com)

mac osx - Getting warnings while "make test" PHP on Mac OS X (MySQL PDO->prepare()) - Server Fault

PHPSCHOOL-Q&A > 리눅스/서버/설치/설정 질문과답변

리눅스에서 apm 설치(apache + php + mysql) (tistory.com)

 

 

 

공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.

 

댓글