Apache와 MySQL이 설치되어 있는 CentOS 7 환경에서 PHP 5.2.17 버전을 설치함으로써 LAMP 스택을 구성하려고 합니다.
이 글에서 진행하는 PHP 설치는 위 링크의 아파치, MySQL을 설치했던 글을 기반으로 작성되었습니다.
( 최소 3번 이상의 테스트를 통해 정리를 한 것이니... 잘 설치되리라 믿습니다. )
PHP 설치가 끝나면, 아파치와 연동하는 부분까지 알아보도록 하겠습니다.
1. 의존성 설치
# yum install -y wget
# yum install -y net-tools # yum install -y gcc
# yum install -y gcc-c++
2. PHP 설치를 위한 여러 라이브러리 설치
PHP에서 그래픽, 이미지를 그리는 함수 등은 유명한 외부 라이브러리를 사용합니다.
이러한 라이브러리 설치가 되어 있지 않다면, PHP를 설치할 때 외부 라이브러리의 변수, 함수를 사용할 수 없으므로 꼭 설치가 필요합니다.
PHP 버전에 따라 외부 라이브러리의 버전들이 굉장히 민감하기 때문에, 테스트를 해 본 아래의 버전을 맞추는 것을 권장합니다.
그렇지 않으면, PHP 버전 또는 라이브러리들의 버전을 바꿔가며 설치해야 PHP 설치가 될 것입니다.
# wget https://zlib.net/fossils/zlib-1.2.8.tar.gz # tar xvfz zlib-1.2.8.tar.gz # cd zlib-1.2.8
# ./configure --prefix=/usr/local # make # make install
2) libpng 1.6.34 ( 링크 )
# cd # wget http://prdownloads.sourceforge.net/libpng/libpng-1.6.34.tar.gz?download # tar xvfz libpng-1.6.34.tar.gz\?download # cd libpng-1.6.34
# cp scripts/makefile.linux makefile # make test # make install
3) freetype 2.4.0 ( 링크 )
# cd # wget https://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.gz # tar xvfz freetype-2.4.0.tar.gz # cd freetype-2.4.0
# ./configure --prefix=/usr/local # make # make install
4) jpeg 8 ( 링크 )
# cd # wget http://www.ijg.org/files/jpegsrc.v8.tar.gz # tar xvfz jpegsrc.v8.tar.gz # cd jepg-8 # ./configure --prefix=/usr/local --enable-shared --enable-static # make # make install
5) libgd 2.2.4 ( 링크 )
# cd
# wget https://github.com/libgd/libgd/releases/download/gd-2.2.4/libgd-2.2.4.tar.gz
# tar xvfz libgd-2.2.4.tar.gz
# cd libgd-2.2.4
# ./configure --prefix=/usr/local
# make
# make install
6) libiconv 1.15 ( 링크 )
# cd
# wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
# tar xvfz libiconv-1.15.tar.gz
# cd libiconv-1.15
# ./configure --prefix=/usr/local
# make
# make install
7) libmcrypt 2.5.8 ( 링크 )
# cd
# wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
# tar xvfz download
# cd libmcrypt-2.5.8
# ./configure --prefix=/usr/local
# make
# make install
8) libxml2 2.6.30 ( 링크 )
# cd # wget http://xmlsoft.org/sources/old/libxml2-2.6.30.tar.gz # tar xvfz libxml2-2.6.30.tar.gz # cd libxml2-2.6.30
# ./configure --prefix=/usr/local --with-zlib=/usr/local --with-iconv=/usr/local # make # make install
# yum install python-devel# make clean# make
9) libxslt 1.1.9 ( 링크 )
# cd
# wget http://ftp.gnome.org/pub/gnome/sources/libxslt/1.1/libxslt-1.1.9.tar.gz
# tar xvfz libxslt-1.1.9.tar.gz
# cd libxslt-1.1.9
# ./configure \
--prefix=/usr/local \
--with-libxml-prefix=/usr/local \
--with-libxml-include-prefix=/usr/local/include \
--with-libxml-libs-prefix=/usr/local/lib
3. PHP 설치
PHP 설치를 위한 라이브러리들을 모두 설치했으므로 이제 본격적으로 PHP 5.2.17 버전을 설치하도록 하겠습니다.
# cd # wget http://museum.php.net/php5/php-5.2.17.tar.gz # tar xvfz php-5.2.17.tar.gz # cd php-5.2.17
# ./configure \ --with-apxs2=/usr/local/victolee/apache2.0.64/bin/apxs \ --with-jpeg-dir=/usr/local \ --with-png-dir=/usr/local \ --with-zlib-dir=/usr/local \ --with-freetype-dir=/usr/local \ --with-ttf=/usr/local \ --with-iconv=/usrl/local \ --with-libxml-dir=/usr/local \ --with-xsl=/usr/local \ --with-mysql=/usr/local/victolee/mysql \ --with-gd \ --with-config-file-path=/usr/local/lib \ --disable-debug \ --enable-ftp \ --enable-gd-native-ttf \ --with-mysqli=/usr/local/victolee/mysql/bin/mysql_config \ --enable-mbstring \ --enable-magic-quotes \ --enable-sockets
# make
# make test
# make install
configure의 설정 내용은 ./configure --help 명령어를 통해 확인이 가능합니다.
** 오류 해결
아파치, MySQL 설치를 글 처음의 링크대로 따라오셨을 경우, 아래의 오류들은 발생하지 않은 것으로 확인 됐습니다.
그래도 라이브러리 버전이 다르거나 어떤 문제로 인해서 오류가 발생했을 경우, 도움이 되고자 제가 겪었던 해결방법을 정리했습니다.
1)
MYSQL_RPL_MASTER
MYSQL_RPL_SLAVE
MYSQL_RPL_ADMIN 가 없다는 오류 발생 경우 ( 참고했던 링크)
mysql.h 헤더파일을 열어서 /mysql_protocol_type 을 검색하여 아래 줄에 다음을 추가합니다.
# vi /usr/local/victolee/mysql/include/mysql.h
enum mysql_rpl_type
{
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
};
2)
xpm.h가 없다는 에러가 발생하면 라이브러리를 추가합니다.
# yum install libXpm-devel
이제 설치가 잘 되었는지 확인하기 위해 PHP 버전을 출력해보고, so 파일이 생성되었는지 확인하겠습니다.
# php --version
# ls -l /usr/local/victolee/apache2.0.64/modules/ libphp5.so
* 참고 *
DSO 방식은 동적 공유 객체 방식의 컴파일이라고 합니다. ( 링크 )
동작 방식은 아파치를 먼저 컴파일 한 상태에서 새로운 모듈이 추가될 때 아파치를 새로 또 컴파일하지 않는 방식을 말합니다.
즉, httpd에 기능이 포함되는 것이 아니라 외부에 기능을 두고 필요할 때마다 동적으로 기능을 호출해서 사용하는 방식입니다.
이 방식은 시스템의 효율을 높여주지만 성능이 조금 떨어진다는 단점이 있는데, HW 성능이 좋아짐에 따라 커버가 가능해진 정도입니다.
PHP는 대부분 DSO 모듈 방식을 사용합니다.
4. 아파치와 PHP 연동
PHP가 설치되었으니 php 파일을 웹 서버에 띄우기 위해 아파치와 연동을 해야 합니다.
아파치 설정 파일 ( httpd.conf )을 열어서 PHP 모듈이 설치되어있는지 확인하고, php 파일을 아파치가 알 수 있도록 DirectoryIndex에 php 확장자를 추가합니다.
그리고 AddType에 MIME를 추가합니다.
# vi /usr/local/victolee/apache2.0.64/conf/httpd.conf
( LoadModule을 검색하여 php 모듈이 추가 되었는지 확인 ( line : 268 ) )
LoadModule php5_module modules/libphp5.so
( DirectoryIndex를 검색하여 php 확장자를 추가 ( line : 430 ) ) DirectoryIndex index.html index.html.var index.php index.php3 ( AddType를 검색하여 MIME를 추가 ( line : 877 ) ) AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php .html .htm .inc AddType application/x-httpd-php-source .phps
5. PHP 설정 및 테스트
다음으로 php.ini 파일에서 PHP와 관련된 설정을 해보겠습니다.
# vi /root/php-5.2.17/php.ini-recommended ( short_open를 검색해서 On으로 수정합니다. ) short_open_tag = On
( opcache.enable을 검색해서 0으로 수정합니다. )
opcache.enble=0
# cp /root/php-5.2.17/php.ini-recommended /usr/local/lib/php.ini
- short_open_tag
- 켜놓으면, php 코드를 작성할 때 <?php ?>가 아닌 <? ?>으로 작성이 가능합니다.
- 하위 버전 호환성을 위해서 On을 해주는 것이 좋습니다.
- opcache.enable
- 캐시를 끄면 개발 시 수정내용이 바로바로 반영되서 개발시에 편리합니다.
- display_errors
- 상세한 오류내용을 화면에 보여줄 것인가를 설정하는 것인데, 개발시엔 편리하지만 배포시엔 Off를 해주도록 합니다.
이 밖에 php.ini 파일에 대한 자세한 항목은 여기를 참고해주세요 !
마지막 설정 파일을 관리를 위해 /usr/local/lib 디렉터리에 옮기겠습니다.
이제 테스트를 위한 php 파일을 작성해보겠습니다.
아파치의 웹 콘텐츠 ( html, php 파일 등 )는 htdocs 디렉터리에 위치합니다.
# cd /usr/local/victolee/apache2.0.64/htdocs
# vi phpinfo.php <? phpinfo(); ?>
아파치가 실행 중이라면 재실행을 하고, 아니라면 실행 시킵니다.
# /usr/local/victolee/apache2.0.64/bin/apachectl start
# ps -ef | grep httpd
마지막으로 ifconfig 명령어로 IP를 확인 한 후, 브라우저로 접속해봅니다. ( 저 같은 경우는, http://192.168.245.130/phpinfo.php )
위와 같이 PHP 정보가 출력되면 PHP 설치 및 아파치 연동이 잘 된 것입니다.
이상으로 PHP 컴파일 설치를 해보았습니다.
요즘 컴파일을 설치하는 경우는 없지만, 이렇게 컴파일 설치를 해보면 에러 스트레스를 통해 리눅스와 좀더 친해질 수 있을것 같습니다.