PHP 란?

  • Professional Hypertext Preprocessor
  • 동적 웹 페이지 생성 스크립트 언어
  • C, C++, Perl, Java 등의 언어를 기반으로 하며 C언어 문법과 비슷
  • 오픈 소스이지만, GNU가 아닌 PHP 프로젝트 라이선스에 적용
  • 초기에는 절차지향 형태의 언어였지만 PHP5에서부터 객체지향을 지원

설치 환경

  • CentOS 7
  • httpd-2.4.46, pcre 8.42, MySQL 5.6.48
  • PHP 7.2.33 / PHP 7.4.10

필수 라이브러리 설치

libiconv 설치

  • 문자 인코딩 라이브러리
[root@localhost work]# wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz --no-check-certificate
[root@localhost work]# tar zxvf libiconv-1.15.tar.gz
[root@localhost work]# cd libiconv-1.15

OS가 32bit 인 경우

[root@localhost libiconv-1.15]# ./configure --prefix=/usr/local --libdir=/usr/local/lib

OS가 64bit인 경우

[root@localhost libiconv-1.15]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost libiconv-1.15]# make -j 4
[root@localhost libiconv-1.15]# make install

libmcrypt

  • 다양한 암호화 알고리즘을 지원하는 mcrypt 라이브러리
[root@localhost work]# wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz --no-check-certificate
[root@localhost work]# tar zxvf libmcrypt-2.5.8.tar.gz
[root@localhost work]# cd libmcrypt-2.5.8

OS가 32bit 인 경우

[root@localhost libmcrypt-2.5.8]# ./configure --prefix=/usr/local --libdir=/usr/local/lib

OS가 64bit 인 경우

[root@localhost libmcrypt-2.5.8]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost libmcrypt-2.5.8]# make -j 4
[root@localhost libmcrypt-2.5.8]# make install
[root@localhost libmcrypt-2.5.8]# /sbin/ldconfig
[root@localhost libmcrypt-2.5.8]# cd libltdl/

OS가 32bit 인 경우

[root@localhost libltdl]# ./configure --enable-ltdl-install --libdir=/usr/local/lib

OS가 64bit 인 경우

[root@localhost libltdl]# ./configure --enable-ltdl-install --libdir=/usr/local/lib64
[root@localhost libltdl]# make
[root@localhost libltdl]# make install

mhash

  • hash 암호화 알고리즘
[root@localhost work]# wget https://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz --no-check-certificate
[root@localhost work]# tar zxvf mhash-0.9.9.9.tar.gz
[root@localhost work]# cd mhash-0.9.9.9

OS가 32bit 인 경우

[root@localhost mhash-0.9.9.9]# ./configure --prefix=/usr/local --libdir=/usr/local/lib

OS가 64bit 인 경우

[root@localhost mhash-0.9.9.9]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost mhash-0.9.9.9]# make -j 4
[root@localhost mhash-0.9.9.9]# make install

mcrypt

  • 다양한 암호화 알고리즘을 지원하는 mcrypt 라이브러리에 대한 인터페이스
  • PHP 7.1.x 버전에서 해당 기능은 비활성화되며 (PHP 소스를 통해 설치되진 않으나 PECL 저장소를 통해 동적 모듈 형태로 설치 가능), 7.2.x 버전 이상에서는 아예 사용할 수 없다.
    • openssl 등 다른 라이브러리를 사용해야 함.
[root@localhost work]# wget https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz --no-check-certificate
[root@localhost work]# tar zxvf mcrypt-2.6.8.tar.gz
[root@localhost work]# cd mcrypt-2.6.8
	
[root@localhost mcrypt-2.6.8]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib64                   <- 추가 후 저장
[root@localhost mcrypt-2.6.8]# /sbin/ldconfig

OS가 32bit 인 경우

[root@localhost mcrypt-2.6.8]# ./configure --prefix=/usr/local --libdir=/usr/local/lib

OS가 64bit 인 경우

[root@localhost mcrypt-2.6.8]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost mcrypt-2.6.8]# make -j 4
[root@localhost mcrypt-2.6.8]# make install

oniguruma (PHP 7.4 설치 시)

  • 정규표현식 라이브러리
  • –enable-mbstring 옵션 사용 시 기존에는 PHP에서 제공하는 번들를 통해 설치를 했었다. 하지만 7.4 버전부터는 해당 라이브러리를 번들로 제공하지 않아 따로 설치해주어야 한다.
[root@localhost work]# yum -y install oniguruma-devel

기타 의존성 라이브러리 설치

  • libxml2 : XML 문서의 구문을 분석하기 위한 소프트웨어 라이브러리
  • libcurl : cURL에서 사용하는 라이브러리.
    • cURL : 다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공하는 소프트웨어
  • libjpeg : JPEG 이미지 데이터 포맷을 다루기 위한 기능을 가진 무료 라이브러리
  • libpng : 공식 PNG 참조 라이브러리
  • Freetype2 : font 라이브러리
  • uw-imap : IMAP 라이브러리 (CentOS 6까지 lib-client 이라는 이름을 가졌으며 7 버전부터 이름이 변경되면서 epel 리포지토리에서 다운받을 수 있다)
    [root@localhost work]# yum -y install libxml2 libxml2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
    [root@localhost work]# yum -y install epel-release
    [root@localhost work]# yum -y install uw-imap-devel
    

PHP 7.4 버전 이상 설치 진행 시 추가 설치가 필요한 라이브러리

  • sqlite : 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 DBMS
  • zlib : c로 작성된 데이터 압축 라이브러리
[root@localhost work]# yum -y install sqlite-devel zlib-devel

PHP 다운로드 및 설치

PHP 7.2 다운로드 및 설치


5.6과 다른 점

  • Font 라이브러리 중 FreeType2를 제외한 T1lib (7.0.0에서 삭제됨), Native TrueType string function (7.2.0에서 삭제됨)은 공식적으로 PHP에서 지원하지 않는다.
  • PHP 7 이상 버전 부터는 mysql 확장을 지원하지 않으며 PDO나 mysqli 확장을 이용해야 한다. 따라서 기존의 --with-mysql=/usr/local/mysql은 삭제하고 --with-mysqli=/usr/local/mysql 을 사용해야 한다.
  • Mcrypt는 2007년 이후로 업데이트가 진행되지 않은 이유로 configure 옵션에서 삭제되었다. 대신 PECL을 이용한 동적 모듈 설치는 가능하다. 암복호화 구현은 Mcrypt 대신에 OpenSSL 이나 Sodium 확장 기능을 이용하는 것을 권장한다.
[root@localhost work]# wget http://www.php.net/distributions/php-7.2.13.tar.gz

[root@localhost work]# tar zxvf php-7.2.13.tar.gz
[root@localhost work]# cd php-7.2.13

[root@localhost php-7.2.13]# LIBS="-liconv"
[root@localhost php-7.2.13]# export LIBS

[root@localhost php-7.2.13]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysqli=/usr/local/mysql/bin/mysql_config --with-gd --with-png-dir --with-zlib-dir --with-jpeg-dir --with-kerberos --with-freetype-dir --enable-mbstring --enable-sockets --disable-debug --enable-dba=shared --with-iconv-dir=/usr/local/lib64 --with-mhash --with-curl --enable-opcache --with-openssl=/usr/local/openssl

[root@localhost php-7.2.13]# make -j 4
[root@localhost php-7.2.13]# make install

PHP 7.4 다운로드 및 설치


7.4 버전부터 변경된 옵션 사항

  • --with-freetype-dir 대신 --with-freetype 을 사용해야 한다.
  • --with-jpeg-dir 대신 --with-jpeg 를 사용해야 한다
  • --with-png-dir 옵션이 사려졌으며, OS에 libpng가 설치되어 있어야 한다.
  • --with-zlib-dir 옵션이 사려졌으며, OS에 zlib 과 zlib-devel이 설치되어 있어야 한다.
  • --with-kerberos 옵션에 의해 설치 시 OpenSSL과의 호환 문제로 에러가 발생한다. 해당 옵션 제거
  • --without-sqlite3 옵션 추가. 컴파일 시 sqlite 설치 시도하면서 에러가 발생한다.
  • --without-pdo-sqlite 옵션 추가. 컴파일 시 sqlite 설치 시도하면서 에러가 발생한다.
  • --with-gd 대신 –enable-gd 을 사용해야 한다.
  • PHP 7.4부터 sqlite 3.7.4 버전 이상을 요구하며 기존에 제공하던 번들이 제거되었다.
[root@localhost work]# wget https://www.php.net/distributions/php-7.4.10.tar.gz

[root@localhost work]# tar zxvf php-7.4.10.tar.gz
[root@localhost work]# cd php-7.4.10

[root@localhost php-7.4.10]# LIBS="-liconv"
[root@localhost php-7.4.10]# export LIBS

[root@localhost php-7.4.10]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-gd --with-jpeg --with-kerberos --with-freetype --enable-mbstring --enable-sockets --disable-debug --enable-dba=shared --with-iconv-dir=/usr/local/lib64 --with-mhash --with-curl --enable-opcache --with-openssl=/usr/local/openssl

[root@localhost php-7.4.10]# make -j 4
[root@localhost php-7.4.10]# make install

PHP 기본 설정 (7.2 / 7.4 동일)

[root@localhost php-7.2.13]# vi /usr/local/apache2/conf/httpd.conf
<IfModule dir_module>
    DirectoryIndex index.html index.php   -> index.php를 추가
</IfModule>
~~~
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
-> 아래의 옵션 2개를 추가
AddType application/x-httpd-php .php .htm
AddType application/x-httpd-php-source .phps
[root@localhost php-7.2.13]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-7.2.13]# vi /usr/local/php/lib/php.ini
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = On     (Off -> On 변경)
-> php 태그 단순화 (<?php ?> -> <? ?>)

; http://php.net/expose-php
expose_php = On          (On -> Off 변경)
-> 아파치 PHP 버전을 숨기기 위한 설정
  • so 파일을 찾을 수 있도록 ld.so.conf의 맨 아래줄에 mysqllib의 디렉터리를 지정해준다.
[root@localhost php-7.2.13]# vi /etc/ld.so.conf
/usr/local/mysql/lib       (OS가 32bit일 경우)
/usr/local/mysql/lib64    (OS가 64bit일 경우)
	

[root@localhost php-7.2.13]# /sbin/ldconfig

[root@localhost php-7.2.13]# /usr/local/apache2/bin/httpd -t
Syntax OK
[root@localhost php-7.2.13]# /usr/local/apache2/bin/apachectl restart