작은숲:위키노트/PHP 7.0 컴파일 설치

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
(PHP 7.0 컴파일 설치에서 넘어옴)

PHP 7.0을 공식 패키지로 제공하는 리눅스 배포본은 아직 없다. 서드파티 저장소에서 받을 수도 있지만 직접 컴파일해서 설치하도록 한다. 2016년 3월 10일 현재, PHP 7.0의 최신 안정 버전은 2016년 3월 3일에 배포된 7.0.4이다.

내려받기

PHP 내려받기 페이지에 가서 적당한 압축 파일을 내려받는다. 리눅스 서버에서는 tar.gz으로 압축된 파일을 받으면 되고, 한국의 미러 사이트에 있는 PHP 7.0.4 배포 파일의 URL은 http://kr1.php.net/distributions/php-7.0.4.tar.gz 이다.

# cd /usr/local/src
# wget http://kr1.php.net/distributions/php-7.0.4.tar.gz
--2016-03-10 22:02:07--  http://kr1.php.net/distributions/php-7.0.4.tar.gz
Connecting to kr1.php.net|115.68.110.81|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18118935 (17M) [application/x-gzip]
Saving to: `mirror'
100%[==========================================================>] 18,118,935  48.2M/s   in 0.4s
2016-03-10 22:02:08 (48.2 MB/s) - `php-7.0.4.tar.gz' saved [18118935/18118935]
# cd php-7.0.4

설치 의존성

PHP 7.0을 컴파일해서 설치하려면 아래 패키지가 필요하다.[1]

  • autoconf: 2.59+
  • automake: 1.4+
  • libtool: 1.4.x+ (except 1.4.2)
  • re2c: Version 0.13.4 or newer
  • flex: Version 2.5.4
  • bison: 2.4 or later

의존 라이브러리 설치

어떤 모듈을 설치하느냐에 따라 다르겠지만 보통 아래 패키지들이 필요하다.

  • curl-devel
  • openssl-devel (requires OpenSSL >= 0.9.8)
  • freetype-devel
  • libpng-devel
  • gd-devel
  • libxml2-devel
  • libmcrypt-devel
  • libXpm-devel
  • mysql-devel
  • bzip2-devel
  • libicu-devel
  • openldap-devel
  • recode-devel
  • libxslt1-devel

컴파일 옵션과 설치 옵션 설정

압축을 푼 후 소스 디렉토리에 들어가 ./configure 명령을 통해 컴파일 옵션과 설치 옵션을 설정한다. 이 옵션에 대한 상세한 설명은 콘솔에서 ./configure --help 명령으로 확인할 수 있다. 아래 내용은 하나의 예일 뿐이니 자신의 설정에 맞도록 도움말을 참고해 수정해야 한다. 이미 PHP 5.3 버전이 설치되어 있고 아파치와 연동되어 웹 서비스에 사용되고 있다. PHP 7.0이 이전 버전에 비해 상당히 뛰어난 성능을 보여주지만 기존 서비스들에는 곧바로 적용할 수는 없다. 특히 PHP 7.0에서는 기존 비표준

방식의 mysql 확장 기능이 제거되어 비표준 MySQL을 사용하는 기존 서비스들은 소스 코드를 수정하지 않으면 PHP 7.0으로 이전할 수 없다. 그래서 PHP 7.0은 당분간 FastCGI로 운용하기로 하고 작은숲:위키노트/PHP-FPM으로 설치한다. 여기에 연동되는 웹 서버는 아파치가 아닌 Nginx를 쓴다. 서버 내에 두 개의 PHP 버전이 존재하므로 PHP 7.0의 설치 위치는 /usr/local/php가 아닌 /usr/local/php70으로 지정한다. 표준 방식은 PHP 5.x부터 PDO로 권고하고 있다.
# ./configure --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody --enable-sigchild \
--prefix=/usr/local/php70 --with-config-file-path=/usr/local/php70/etc \
--with-config-file-scan-dir=/usr/local/php70/etc/conf.d \
--with-openssl --with-kerberos --with-zlib --enable-bcmath --with-bz2 --enable-calendar \
--with-curl --enable-dba --with-gdbm --with-libxml-dir --enable-exif --enable-ftp \
--with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf \
--enable-intl --with-gettext --with-mhash --with-imap --with-imap-ssl --enable-mbstring \
--with-mcrypt --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql \
--enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx \
--enable-zip
...
Thank you for using PHP.
config.status: creating php7.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/www.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands

컴파일과 설치

# make
...
Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
pharcommand.inc
invertedregexiterator.inc
directorygraphiterator.inc
clicommand.inc
directorytreeiterator.inc
phar.inc
Build complete.
Don't forget to run 'make test'.
# make test
=====================================================================
PHP         : /usr/local/src/php-7.0.4/sapi/cli/php
PHP_SAPI    : cli
PHP_VERSION : 7.0.4
ZEND_VERSION: 3.0.0
...
If you don't want to send the report immediately you can choose
option "s" to save it.  You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]:

makemake test를 하는데 시간이 어느 정도 걸린다. 테스트까지 끝나면 이제 설치할 준비가 끝났다. 설치는 간단하다. 설정할 때 지정했던 디렉토리, 즉 여기에서는 ./configure ... --prefix=/usr/local/php70 ...라고 했으니 /usr/local/php70 디렉토리 아래에 필요한 파일들을 만들어준다.

# make install
Installing shared extensions:     /usr/local/php70/lib/php/extensions/no-debug-non-zts-20151012/
Installing PHP CLI binary:        /usr/local/php70/bin/
Installing PHP CLI man page:      /usr/local/php70/php/man/man1/
Installing PHP FPM binary:        /usr/local/php70/sbin/
Installing PHP FPM config:        /usr/local/php70/etc/
Installing PHP FPM man page:      /usr/local/php70/php/man/man8/
Installing PHP FPM status page:   /usr/local/php70/php/php/fpm/
Installing phpdbg binary:         /usr/local/php70/bin/
Installing phpdbg man page:       /usr/local/php70/php/man/man1/
Installing PHP CGI binary:        /usr/local/php70/bin/
Installing PHP CGI man page:      /usr/local/php70/php/man/man1/
Installing build environment:     /usr/local/php70/lib/php/build/
Installing header files:           /usr/local/php70/include/php/
Installing helper programs:       /usr/local/php70/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php70/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php70/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.0
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.3.0
[PEAR] PEAR           - installed: 1.10.1
Wrote PEAR system config file at: /usr/local/php70/etc/pear.conf
You may want to add: /usr/local/php70/lib/php to your php.ini include_path
/usr/local/src/php-7.0.4/build/shtool install -c ext/phar/phar.phar /usr/local/php70/bin
ln -s -f phar.phar /usr/local/php70/bin/phar
Installing PDO headers:           /usr/local/php70/include/php/ext/pdo/

실행 파일을 경로가 잡혀있는 /usr/bin 디렉토리에 심볼릭 링크를 만들어준다.

# ln -s /usr/local/php70/bin/php /usr/bin/php7
# php7 -v
PHP 7.0.4 (cli) (built: Mar 11 2016 00:08:08) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

기존에 사용하던 PHP CLI 스크립트가 없다면 /usr/bin/php으로 만들어도 괜찮다.

설정 파일 생성

기존에 쓰던 이전 버전의 php.ini를 복사해서 써도 되고, 아니면 새 버전의 예제 파일을 복사해서 설정해도 된다.

# cp php.ini-production /usr/local/php70/etc/php.ini

작은숲:위키노트/PHP-FPM으로 쓸 경우 PHP-FPM의 설정 파일도 만들어 준다.

# cp /usr/local/php70/etc/php-fpm.conf.default /usr/local/php70/etc/php-fpm.conf

만든 설정 파일에 필요한 설정을 한다.

같이 보기

참고

주석

이 작은숲 문서의 출처는 위키노트의 위키노트/PHP 7.0 컴파일 설치 문서입니다.