Apache와 MySQL이 설치되어 있는 CentOS 7 환경에서 PHP 5.2.17 버전을 설치함으로써 LAMP 스택을 구성하려고 합니다.

  • 아파치 2.0.64 설치 ( 링크 )
  • MySQL 5.6.15 설치 ( 링크 )

이 글에서 진행하는 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 설치가 될 것입니다.


1) zlib 1.2.8 ( 링크 )

# 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


** 오류 해결
python.h 가 없다고 나오면 python-devel 라이브러리를 설치합니다.  ( 스택오버 플로우 - 링크 )
# 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 컴파일 설치를 해보았습니다.

요즘 컴파일을 설치하는 경우는 없지만, 이렇게 컴파일 설치를 해보면 에러 스트레스를 통해 리눅스와 좀더 친해질 수 있을것 같습니다.


댓글 펼치기 👇
  1. 지나가던리뉴비 2019.12.18 15:55

    서버 api 개발만 하다가 서버 자체에 대해 공부하다보니 리눅스를 접하고 고통 받다가 엄청난 스트레스와 함께 많은 성취를 얻었습니다. 참고 많이 했어요 ㅎㅎ 좋은 정보 공유해주셔서 정말로 감사합니다!

    • Favicon of https://victorydntmd.tistory.com victolee 우르르응 2019.12.18 17:03 신고

      ㅠㅠㅠ맞아요.. 그 고통이 성취감으로 돌아오죠...
      도움이 되셨다니 다행이네요 ㅎㅎ 감사합니다~

  2. 2019년인데 2020.08.13 06:00

    보안과 속도문제를 헤결한 PHP 7이 2015년에 나왔는데 sql인젝션 방어도 안되는 PHP 5.2를 소개 하는글이 2019년에 올라 와서 실망스럽네요

    • Favicon of https://victorydntmd.tistory.com victolee 우르르응 2020.08.13 08:13 신고

      아직 php5.2버전을 사용하는 곳도 있습니다.
      이 글의 목적은 컴파일설치로 리눅스 환경에 친숙해지자는 목적이구요.
      원하시는 php7 설치는 다음글에도 있습니다

      무엇을 기대하셔서 실망하셨는지는 몰라도, 누군가에게는 도움이 될수 있습니다.
      필요한 정보만 찾아서 얻어가시면 된다고봅니다.