PHP 8 출시 릴리즈 - 설치 YUM APT Source Compile - WordPress 업데이트 일정

Last Updated on 1월 11, 2021 by 태랑(정현호)



1. PHP 8.0 Released!



PHP 8.0 버전이 "26 Nov 2020" 에 정식 릴리즈 되었습니다




 

PHP8 주요 향상 된 기능 및 New Features 로는 다음과 같습니다

Union Types
Named Arguments
Match Expressions
Attributes
Constructor Property Promotion
Nullsafe Operator
Weak Maps
Just In Time Compilation - JIT
And much much more…



PHP는 버전이 변경되면서 성능 향상이 계속 되고 있고 PHP 7.4 에서도 이전 버전에 비해 많은 개선과 성능 향상이 있었다고 벤치마크를 통해 확인 되었는데요

이번 PHP8.0의 벤치마크 결과도 이전 버전에 비해 많은 성능적 개선을 보여주고 있습니다








2. 워드프레스 5.6 릴리즈 완료



PHP 로 작성된 OpenSource CMS 인 WordPress 도 PHP 8.0 버전에 맞추어 업데이트 일정이 발표 되었습니다.

WordPress Core aims to be compatible with PHP 8.0 in the 5.6 release (currently scheduled for December 8, 2020)
워드프레스는 5.6 릴리즈 12월 8일에 될 예정이고 PHP 8.0 지원 될 예정 입니다

-> Update : 5.6 버전이 릴리즈 되었습니다.




5.6 버전으로 다운로드 및 기존 워드프레스 업데이트 가능 합니다.











3. PHP 8.0 설치 환경



설치 환경 정보

OS : Centos 7.8 / Ubuntu 18.04

PHP : 8.0 버전 YUM/ APT / Source Compile 로 설치
  Source Compile 파일 다운로드 URL
  # wget https://www.php.net/distributions/php-8.0.0.tar.gz
  # tar zxvf php-8.0.0.tar.gz

Mysql : Mysql 5.7 , Source and YUM(RPM)

etc : libgd-2.3.0 / libzip-1.7.3





4. 사전 패키지 설치



설치시 필요한 패키지는 아래의 목록으로 설치 하였습니다.
* CentOS 7.8 기준 입니다.


[root]# yum -y install curl-devel libpng \
libpng-devel libjpeg libjpeg-devel \
libwebp libwebp-devel libXpm \
libXpm-devel openssl openssl-devel \
autoconf curl zlib zlib-devel \
freetype freetype-devel gd gd-devel \
libjpeg libjpeg-devel libmcrypt \
libmcrypt-devel libtool-ltdl-devel \
libzip libzip-devel \
oniguruma-devel cmake gcc-c++ gcc \
libxml2-devel libxml2 libcurl \
libcurl-devel bzip2-devel sqlite-devel


설치는 CentOS -YUM , Ubuntu-APT , 소스 컴파일 3개에 대해서 아래 설명 되어 있습니다.




5.1 Centos - YUM Install



1. Repository 설치

centos 7.8 기준으로 yum repository에 등록된 php 최신 버전은 5.4.16 입니다
그 이상 버전을 사용하려면 먼저 REMI repository 설치를 해야 합니다.

[root]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm



2. repo 파일 수정

Repository 설치 후 repo 파일을 수정 합니다.


[root]# vi /etc/yum.repos.d/remi.repo

[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror

mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

enable=0 -> enable=1 로 수정



3. PHP 8.0 설치

[root]# yum-config-manager --enable remi-php80

[root]# yum -y install php80 php80-php-common \
php80-php-fpm php80-php-gd \
php80-build php80-php php80-php-devel \
php80-php-mysqlnd php80-php-opcache \
php80-php-mbstring php80-php-pdo \
php80-php-pecl-imagick \
php80-php-pecl-imagick-devel php80-php-pecl-mcrypt \
php80-php-pecl-zip php80-php-bcmath \
curl curl-devel \
libpng libpng-devel libwebp libwebp-devel \
libXpm libXpm-devel openssl openssl-devel \
autoconf zlib zlib-devel freetype freetype-devel \
gd gd-devel libmcrypt libmcrypt-devel \
libtool-ltdl-devel libxml2-devel \
libxml2 libcurl libcurl-devel


[참고] 포스팅 시점에서 기존에 7.4 에 있었던 2개 패키지는 아직 확인 되지 않습니다
php80-php-pecl-crypto
php80-php-pecl-mysql




4. 설치 완료 후 확인

[root]# php80 -v
PHP 8.0.0 (cli) (built: Nov 24 2020 17:04:03) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies




5.2 Ubuntu - apt 로 설치



1. 저장소 등록

최신 버전 설치를 위한 저장소 등록 및 PHP 설치

ubuntu$ sudo apt -y install software-properties-common
ubuntu$ sudo add-apt-repository ppa:ondrej/php
ubuntu$ sudo apt update



2. php8.0 설치

ubuntu$ sudo apt install php8.0 php8.0-cli php8.0-fpm \
php8.0-bcmath php8.0-bz2 php8.0-common php8.0-curl \
php8.0-dba php8.0-gd php8.0-mbstring php8.0-opcache \
php8.0-readline php8.0-soap php8.0-xml php8.0-zip \
php8.0-ctype php8.0-pdo php8.0-redis php8.0-mysql \
php8.0-imagick
 php8.0-intl php8.0-mysqlnd \
php8.0-gmp php8.0-dev -y






5.3 컴파일 설치 시 문제 발생



Source Compile Problem encountered


1. Configure 구문 변경

7.2 -> 7.4 로 변경시 Configure 구문 오류 내용

7.2 -> 7.4로 변경 하면서 컴파일에서 사용하던 configure 구문을 그대로 사용 하였을 때 몇가지의 unrecognized options warning 이 발생하였습니다

configure: WARNING: unrecognized options: --with-gd, --with-gd, --with-jpeg-dir, --with-libxml-dir, --with-png-dir, --with-freetype-dir,


그래서 아래와 같이 수정/변경 하였습니다.

--enable-zip  ==> --with-zip
--with-gd ==> --enable-gd
--with-jpeg-dir ==> -with-jpeg
--with-libxml-dir ==> --with-libxml
--with-png-dir ==> --with-png
--with-freetype-dir ==> --with-freetype

--with-png <==옵션 없음 제외




2. PHP ./configure 시 

설치에 필요한 패키지나 라이브러리의 요구 버전이 yum 으로 다운받을 수 있는 버전보다 높아서 해당 패키지 또한 컴파일 해서 설치를 해야하는 상황이 발생 하였습니다.



# Error 1

checking for gdlib >= 2.1.0… no configure: error: Package requirements (gdlib >= 2.1.0) were not met: Requested 'gdlib >= 2.1.0' but version of gd-devel is 2.0.34


[root]]# yum list | grep gd-devel
gd-devel.x86_64 2.0.35-26.el7 @base

yum repository 에서 받을 수 있는 버전이 설치에 필요한 요구 버전보다 낮았습니다 그래서 소스 컴파일로 패키지를 설치 하였습니다.

[root]]# wget https://github.com/libgd/libgd/releases/download/gd-2.3.0/libgd-2.3.0.tar.gz
[root]]# tar zxvf libgd-2.3.0.tar.gz
[root]]# cd libgd-2.3.0
[root]]# ./configure --prefix=/usr/local/libgd-2.3.0
[root]]# make ; make install



# Error 2

checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0… no

configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

No package 'libzip' found

No package 'libzip' found
No package 'libzip' found

yum 으로 설되는 libzip libzip-devel 패키지의 버전이 요구 버전 보다 낮아서 libzip 을 compile 설치 하였습니다.

문제는 libzip 을 cmake 하기 위해서 또 필요한 cmake 버전이 충족치(낮아서) 않아서 cmake도 컴파일로 설치를 해야 했습니다.
 - libzip 필요 CMake 버전 관련 에러 메세지
    CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
    CMake 3.0.2 or higher is required. You are running version 2.8.12.2


# Error2-1 : cmake-3.19 설치

[root]# yum -y install gcc-c++
[root]# wget https://github.com/Kitware/CMake/releases/download/v3.19.0-rc1/cmake-3.19.0-rc1.tar.gz
[root]# tar zxvf cmake-3.19.0-rc1.tar.gz
[root]# cd cmake-3.19.0-rc1/
[root]# ./configure --prefix=/usr/local/cmake-3.19.0-rc1
[root]# make;make install


# Error2-2 : libzip 설치

[root]# wget https://libzip.org/download/libzip-1.7.3.tar.gz
[root]# tar zxvf libzip-1.7.3.tar.gz

[root]# cd libzip-1.7.3
[root]# /usr/local/cmake-3.19.0-rc1/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip-1.7.3
[root]# make;make install




5.4 configure / Compile



[참고]
PHP Configure 전 PKG_CONFIG_PATH 환경변수 에 2개의 pkgconfig 를 설정 해야 합니다.

[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig



1. 파일 다운로드

[root]# wget https://www.php.net/distributions/php-8.0.1.tar.gz
[root]# tar zxvf php-8.0.1.tar.gz


1-1 Apache 와 같은 서버 에서 설치 할 경우


[root]# cd /root/pkg/php-8.0.1

[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-8.0.1 \
--with-apxs2=/usr/local/apache2.4.43/bin/apxs \
--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl --with-zlib \
--with-gettext --enable-sigchild --with-iconv \
--enable-opcache --enable-fpm \
--with-fpm-user=apache --with-fpm-group=apache \
--with-pdo_mysql --with-curl --enable-exif \
--enable-bcmath --enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install




1-2 apache 와 다른 서버 에서 설치 할 경우

[root]# cd /root/pkg/php-8.0.1
[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-8.0.1 \
--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl --with-zlib \
--with-gettext --enable-sigchild --with-iconv \
--enable-opcache --enable-fpm \
--with-fpm-user=apache --with-fpm-group=apache \
--with-pdo_mysql --with-curl --enable-exif \
--enable-bcmath --enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install



1-3 apache 와 다른 서버 에서 설치 할 경우 + Mysql 이 YUM(RPM) 설치 된 환경

먼저 심볼릭 링크를 생성 후 진행 합니다.
[root]# mkdir -p /usr/local/mysql/bin
[root]# ln -s /usr/bin/mysql_config /usr/local/mysql/bin/mysql_config


[root]# cd /root/pkg/php-8.0.1
[root]# export PKG_CONFIG_PATH=/usr/local/libgd-2.3.0/lib/pkgconfig:/usr/local/libzip-1.7.3/lib64/pkgconfig

[root]# ./configure --prefix=/usr/local/php-8.0.1 \
--with-config-file-path=/etc --enable-mysqlnd \
--with-pdo-mysql=/usr/local/mysql --enable-soap \
--enable-mbstring --with-zip --enable-exif \
--enable-gd --with-external-gd \
--with-webp --with-jpeg \
--with-libxml --enable-gd-jis-conv --with-zlib-dir \
--with-freetype --with-xpm \
--enable-sockets --with-openssl --with-zlib \
--with-gettext --enable-sigchild --with-iconv \
--enable-opcache --enable-fpm \
--with-fpm-user=apache --with-fpm-group=apache \
--with-pdo_mysql --with-curl --enable-exif \
--enable-bcmath --enable-mbstring=all \
--with-mysqli=/usr/local/mysql/bin/mysql_config

[root]# make; make install




6. mcrypt 와 imagick 모듈



1. Module mcrypt

PHP 에서 mcrypt 모듈은 이미 7.1에서 DEPRECATED 되었고 7.2에서는 제거 된 상태 입니다.

또한 PHP 8.0 대상으로 mcrypt 를 컴파일시 아래와 같이 에러가 발생됨에 따라 저는 8.0 버전 부터는 설치를 생략 하겠습니다.

/root/pkg/mcrypt-1.0.3/mcrypt.c: In function ‘zif_mcrypt_generic’:
/root/pkg/mcrypt-1.0.3/mcrypt.c:633:2: error: expected ‘;’ before ‘}’ token



2. imagick 설치

업데이트 일자 : 2021/01/11

PHP imagick EXT 는 GitHub 에서 확인 해보시면 됩니다.



1. 설치 진행

[root]# yum -y install ImageMagick-devel
[root]# cd /root/pkg/
[root]# git clone https://github.com/Imagick/imagick.git
[root]# cd imagick
[root]# /usr/local/php-8.0.0/bin/phpize
[root]# ./configure --with-php-config=/usr/local/php-8.0.0/bin/php-config
[root]# make && make install



2. 설치된 모듈 확인
[root]# ls -al /usr/local/php-8.0.1/lib/php/extensions/no-debug-non-zts-20200930/






7. 컴파일 설치 후 후속 작업



* Source Compile 로 설치 하였을 때 후속작업 입니다.
   YUM/APT 로 설치 하신 경우 생략 하시면 됩니다.

신규 설치에 따른 추가 후속 작업 내용이 필요 하시거나 PHP-FPM 의 더 자세한 내용이 필요하실 경우 아래 포스팅을 참조하시면 됩니다.



* 기존에 PHP 7.4 에서 PHP 8.0 로 신규 설치에 따른 환경 변경 내용입니다.



1. extension_dir 경로 변경


기존의 사용중인 php.ini 에서 extension_dir 경로 변경

[root]# vi /etc/php.ini


extension_dir 수정
extension_dir=/usr/local/php-8.0.1/lib/php/extensions/no-debug-non-zts-20200930

또는 심볼릭 링크 경로로 변경
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930



2. 기존 사용 파일 복사

2.1 기존 사용중이던 php-fpm.conf  파일 복사
[root]# cp /usr/local/php/etc/php-fpm.conf  /usr/local/php-8.0.0/etc/


2.2 복사한 기존 파일에서 경로 등을 체크 
[root]# cd /usr/local/php-8.0.0/etc/

[root]# vi php-fpm.conf


2.3 기존 사용 중인 php-fpm pool 설정 파일 복사
[root]# cp -rp /usr/local/php/etc/php-fpm.d/*   /usr/local/php-8.0.0/etc/php-fpm.d/


2.4 php-fpm 중지 및 경로 수정 , 서비스 재가동
[root]# systemctl stop php-fpm


2.5 필요시 서비스 파일내 경로 수정
[root]# vi /etc/systemd/system/php-fpm.service

ex)
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf




3. 심볼릭 링크 수정 및 php-fpm 기동

[root]# cd /usr/local
[root]# ls -alrt
[root]# rm php
  -> 기존 심볼릭 링크 삭제

[root]#
ln -s /usr/local/php-8.0.0  /usr/local/php

[root]#
systemctl daemon-reload
[root]# systemctl enable php-fpm
[root]# systemctl start php-fpm




연관된 글
proxy_balancer 를 이용한 PHP-FPM 다중화 구성

 PHP 7.4 Source Compile

PHP & MySQL 25주년

 

답글 남기기