PHP 란?

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

설치 환경

  • CentOS 5,6,7
  • httpd-2.4.39, pcre 8.42, MySQL 5.6.42
  • PHP 5.6.40

필수 라이브러리 설치

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
[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
[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
[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
[root@localhost mcrypt-2.6.8]# make install

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

  • libxml2 : XML 문서의 구문을 분석하기 위한 소프트웨어 라이브러리
  • libcurl : cURL에서 사용하는 라이브러리.
    • cURL : 다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공하는 소프트웨어
  • libjpeg : JPEG 이미지 데이터 포맷을 다루기 위한 기능을 가진 무료 라이브러리
  • libpng : 공식 PNG 참조 라이브러리
  • Freetype2 : font 라이브러리
  • libc-client-devel (uw-imap-devel) : IMAP 라이브러리

OS가 CentOS 6인 경우

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libxml2 libxml2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libc-client-devel

OS가 CentOS 7 이상 인 경우

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libxml2 libxml2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel

libc-client-devel 의 이름이 CentOS 7에서 부터 uw-imap-devel 으로 변경되었으며, 기본 리포지토리로는 설치되지 않는다. 따라서 아래와 같이 EPEL 리포지토리가 있어야 패키지 설치가 가능하다.

[root@localhost work]# yum -y install epel-release
[root@localhost work]# yum -y install uw-imap-devel

PHP 5.6 다운로드 및 설치

[root@localhost work]# wget http://www.php.net/distributions/php-5.6.40.tar.gz

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

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

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

-> OS가 32bit인 경우에는 --with-iconv-dir 옵션의 경로를 제거해준다.

[root@localhost php-5.6.40]# make
[root@localhost php-5.6.40]# make install

PHP 기본 설정

[root@localhost php-5.6.40]# 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-5.6.40]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-5.6.40]# 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-5.6.40]# vi /etc/ld.so.conf
/usr/local/mysql/lib       (OS가 32bit일 경우)
/usr/local/mysql/lib64    (OS가 64bit일 경우)
	

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

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