본문 바로가기

PHP

[PHP] php-mcrypt 모듈 설치하기

Java와 MySQL에 이어서.. PHP언어를 통해 AES 암호화를 진행해야하는 일이 있었습니다.
PHP언어의 양방향 암호화는 mcrypt_encrypt함수를 통해 진행할 수 있습니다.

그런데.. 이 함수를 사용하려면 php-mcrypt 모듈 확장을 설치해야합니다.

일반적으로.. yum을 통해 설치할 수 있는데요.
yum list php-mcrypt 

yum install php-mcrypt
- You need to be root to perform this command. 라는 메세지가 뜨면
sudo yum list php-mcrypt 명령어 혹은 root 계정으로 수행합니다.
참고 : http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_php-mcrypt_%EC%84%A4%EC%B9%98

yum으로 설치하고 php -m 명령어로 조회해보니 모듈이 추가되지 않았습니다.

이상하다? php 설정을 해야하나? 싶어 php.ini을 수정했습니다.

php.ini

extension_dir = "/모듈들이 모여있을 공통 경로"

; 암호화 모듈 설정(리눅스용)
extension=mcrypt.so

설치한 php-mcrypt 버전

명령어 : rpm -qa | grep mcrypt

php-mcrypt-5.3.3-4.el6.x86_64
libmcrypt-2.5.8-9.el6.x86_64

설치한 php-mcrypt 의 경로

명령어 : rpm -ql php-mcrypt

설정 후 php -m을 해보니 경고가 뜹니다.
PHP Warning:  PHP Startup: mcrypt: Unable to initialize module
Module compiled with module API=20090626, debug=0, thread-safety=0
PHP    compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
- 구글링해보니.. PHP 컴파일 버전은 20060613인데, 확장 모듈은 20090628입니다.
- PHP 버전이 낮아 확장 모듈을 초기화할 수 없다는 뜻입니다.

그렇다면.. PHP를 재설치해야되나? 재컴파일해야되나?
- 아쉽게도 구축된 PHP의 원본 소스(.configure)가 없고 컴파일된 php만 존재해서 재컴파일은 불가능했습니다.

다른 방법이 있지 않을까? 싶어 php-mcrypt의 확장 버전을 기존 php와 동일하게 세팅하면 해결될 것 같았습니다.
php-mcrypt 저장소 - ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64/os/Packages/
- ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/
를 통해 php-mcrypt-5.2.5-7.fc9.x86_64.rpm을 다운로드합니다.
5.2.5를 받는 이유는 php 버전이 5.2.5이기 때문입니다. php-mcrypt-5.1.x를 받으면 이번에는 설치를 할 수 없습니다.
yum이 아닌 rpm으로 직접 설치하는 것이기 때문에 디펜던시로 걸려있는 php-common-5.2.5-7.fc9.x86_64.rpm도 함께 받습니다.

이미 설치된 5.3.3 모듈 제거하기

이미 yum으로 php-mcrypt를 설치했고 디펜던시로 함께 설치된 php-common을 제거합니다. (둘다 버전이 5.3.3일거에요..)
// 설치된 모듈 찾아보기
rpm -qa | grep mcrypt
rpm -qa | grep php-common

// 모듈 제거하기 (알맞은 파일명으로 제거)
sudo yum remove php-mcrypt.x86_64
sudo yum remove php-common

RPM 파일 설치

// php-common 부터 설치
// wget으로 다운로드합니다.
wget 'ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64/os/Packages/php-common-5.2.5-7.fc9.x86_64.rpm'
wget 'ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/php-mcrypt-5.2.5-7.fc9.x86_64.rpm'

// 설치합니다. -i 옵션은 install의 의미, -u를 하면 없으면 설치, 있으면 버전업그레이드입니다. 
sudo rpm -ivh php-common-5.2.5-7.fc9.x86_64.rpm
sudo rpm -ivh php-mcrypt-5.2.5-7.fc9.x86_64.rpm
- 참고 : libmcrypt-2.5.8-9.el6.x86_64 이 설치되지 않은 경우 이 모듈도 설치를 해야합니다.(yum으로 버전을 체크한 후 2.5.8-9.el6 버전을 받았습니다)
자.. 이제 다시 php -m을 해봅니다.
mbstring
mcrypt
mysql
- mcrypt가 드디어 설치되었습니다.
mcrypt에 포함된 특정 함수를 수행하여 undefine 에러가 아닌 warnning이 뜨는지 미리 확인해봅니다.
php -r "mcrypt_create_iv();"
- Warning: mcrypt_create_iv() expects at least 1 parameter, 0 given in Command line code on line 1
드디어.. 알맞은 php 버전에 맞는 확장 모듈을 설치했습니다!

참고
- yum과 rpm명령 : http://ann-moon.tistory.com/85
- http://xens.tistory.com/entry/%ED%8C%81-PHP%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%ED%9B%84-Nmail-%EC%82%AC%EC%9A%A9%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
- http://zetawiki.com/wiki/CentOS_yum_%ED%8C%A8%ED%82%A4%EC%A7%80_%EC%82%AD%EC%A0%9C