Last Updated on 7월 30, 2022 by Jade(정현호)
안녕하세요
이번 포스팅에서는 PHP 5.6을 Source Compile 로 설치 하면서 + Zend Guard + Suhosin + memcached + Opcache 등을 같이 구성하는 글 입니다.
## 선행 패키지 설치
[root]# yum -y install curl curl-devel zlib.x86_64 zlib-devel.x86_64 \
freetype.x86_64 freetype-devel.x86_64 freetype-utils.x86_64 \
gd.x86_64 gd-devel.x86_64 libjpeg.x86_64 libjpeg-devel.x86_64 \
libpng.x86_64 libpng-devel.x86_64 libmcrypt.x86_64 \
libmcrypt-devel.x86_64 libtool-ltdl-devel.x86_64 autoconf.x86_64 \
libxml2-devel.x86_64 libxml2.x86_64 libcurl.x86_64 libcurl-devel.x86_64
## mysql 설치
웹서버와 DB가 물리적으로 나눠서 사용하더라도 웹서버에서는 mysql은 client library가 필요하여
php 컴파일 하기전에 mysql을 먼저 설치가 필요 합니다, 관련글은 아래를 참조하시면 됩니다.
Mysql 5.7 설치 (Source Compile&binary) on CentOS 7
Centos 7 버전에서 MySQL 설치에 관한 전반적인 내용이 포함되어 있습니다.

## Apache 2.4 설치
아래 링크에 참고사항, prefork 방식 설치를 참고해주시면 됩니다.
APM - Apache 2.4 설치 + OpenSSL 1.1.1 - Linux(APM)
해당 포스팅은 Source Compile 로 설치하는 APM(Apache+PHP-FPM+Mysql) 연재글 입니다.

* Apache 2.4 환경에 php-5.6.40 으로 설치 진행 하였습니다.
wget https://www.php.net/distributions/php-5.6.40.tar.gz
tar zxvf php-5.6.40.tar.gz
cd php-5.6.40
./configure --prefix=/usr/local/php-5.6.40 --with-apxs2=/usr/local/apache2.4/bin/apxs \
--with-mysql=/usr/local/mysql --with-config-file-path=/etc \
--with-pdo-mysql=/usr/local/mysql \
--enable-mbstring --with-gd=shared --with-gd --with-jpeg-dir \
--enable-sockets --with-openssl --with-zlib --with-mcrypt --with-gettext \
--enable-sigchild --with-iconv --with-libxml-dir --with-png-dir \
--with-freetype-dir --with-curl
[root]# make;make install
# PHP Path 설정
vi .bash_profile
PATH=$PATH:/usr/local/php5.6.40/bin
export PATH
# 여기까지 php 정보 확인
# php -v
PHP 5.6.40 (cli) (built: Jul 25 2020 16:21:29)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
## Suhosin Extension suhosin-0.9.38 설치
Suhosin 설치는 컴파일 전의 php 소스를 패치하는 방법과 익스텐션으로 설치하는 방법인데 2가지가 있으며
extention 방식으로 진행하도록 하게겠습니다.
= 다운로드
https://download.suhosin.org/suhosin-0.9.38.tar.gz
tar zxvf suhosin-0.9.38.tar.gz
cd suhosin-0.9.38
/usr/local/php-5.6.40/bin/phpize
./configure --with-php-config=/usr/local/php-5.6.40/bin/php-config
make && make install
Installing shared extensions: /usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/
# /etc/php.ini 에 아래 내용 추가&변경
* 5개는 주석 제거 및 내용 수정
date.timezone = Asia/Seoul
expose_php = Off
post_max_size = 500M
upload_max_filesize = 200M
memory_limit = 512M
[suhosin]
extension=/usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/suhosin.so
# 여기까지 php 정보 확인
# php -v
PHP 5.6.40 (cli) (built: Jul 25 2020 16:21:29)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Suhosin v0.9.38, Copyright (c) 2007-2015, by SektionEins GmbH
## Zend Guard loader download
https://www.zend.com/downloads/zend-guard-loader
# Download link
wget https://www.zend.com/download/HSimaiLlzsupXHIVGFGIhX5K9jO4owEsZI4yNzQQQmBa1rU8
tar zxvf zend-loader-php5.6-linux-x86_64_update1.tar.gz
cd zend-loader-php5.6-linux-x86_64
cp ZendGuardLoader.so /usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/
vi /etc/php.ini 을 열고 아래 내용추가
* extension 대신에 zend_extension 으로 사용해야함
[Zend]
zend_extension=/usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
Zend_loader.obfuscation_level_support=3
# (서버 성능이 낮으면 1)
# php 정보 조회
PHP 5.6.40 (cli) (built: Jul 25 2020 16:21:29)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2015, by Zend Technologies
with Suhosin v0.9.38, Copyright (c) 2007-2015, by SektionEins GmbH
## memcached-2.2.0 설치
yum -y install libmemcached-devel.x86_64
https://pecl.php.net/package/memcached
tar zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
/usr/local/php-5.6.40/bin/phpize
./configure --with-zlib-dir=/usr --with-libmemcached-dir=/usr
make ; make install
# make install 완료 후
Installing shared extensions: /usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/
vi /etc/php.ini 을 수정하여 memcached 정보도 추가 합니다.
[memcached]
extension=/usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/memcached.so
# php 정보 조회 하였을때는 memcache의 내역은 보이지 않고 phpinfo.php 를 해서 확인 할 수 있습니다.
## Zend Opcache
Zend Opcache 는 php 5.6 이나 php-7.x 버전에서는 Zend Opcache가 포함되어 설치되며
php.ini 파일에서 extension 추가 만으로 사용이 가능 합니다.
[opcache]
zend_extension=/usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
* opcache.memory_consumption 이 단위는 MB 입니다.
========= 추가 내역 - mysqli =========
PHP 소스컴파일 이후 mysqli 설치하기
cd /root/pkg/php-5.6.40/ext/mysqli
/usr/local/php-5.6.40/bin/phpize
./configure --with-php-config=/usr/local/php-5.6.40/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config
make 하기전에 에러발생 되는 부분을 수정이 필요합니다.
vi mysqli_api.c
ext/mysqlnd/mysql_float_to_double.h
위의 내용을 아래와 같이 수정해줍니다
../../ext/mysqlnd/mysql_float_to_double.h
make ; make install
Installing shared extensions: /usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/
Installing header files: /usr/local/php-5.6.40/include/php/
vi /etc/php.ini 에서
[MySQLi] 항목에 아래 extension 추가
extension=/usr/local/php-5.6.40/lib/php/extensions/no-debug-non-zts-20131226/mysqli.so
## 여기까지 적용 했을때 php의 정보 확인
PHP 5.6.40 (cli) (built: Jul 25 2020 16:21:29)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2015, by Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
with Suhosin v0.9.38, Copyright (c) 2007-2015, by SektionEins GmbH

Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io