낡은 PHP 환경에서 쓸 만한 프레임워크

빠르게 만들어 줘야 하는 웹 사이트가 있었는데 웹 사이트를 올릴 서버의 환경이 너무 낡아(PHP 5.2.17이 설치되어 있었다), 라라벨을 사용할 수 없었다. 다른 프레임워크를 써 보려고 알아보았다. 가장 먼저 알아 본 코드이그니터(CodeIgniter)는 PHP 필요 버전 5.3.7, 권장 버전 5.6이다. 그 다음으로 케익PHP(CakePHP)를 찾아보았다. PHP 필요 버전 5.5.9다. 이것도 안 된다. 고민하고 있는데 동료가 말을 걸었다. “코드이그니터 옛날 버전이라도 쓰면 어때요?” 흠, 그렇군. 코드이그니터 버전 2를 살펴보았다. 일단 PHP 필요 버전은 5.1.6. 사용 가능하다. 다음은 내가 조사한 몇몇 프레임워크들의 PHP 요구 버전이다.

프레임워크 요구 PHP 최소 버전
라라벨 4.2 5.4
라라벨 5.3 5.6.4
케익PHP 3.3 5.5.9
코드이그니터 2 5.1.6
코드이그니터 3 5.3.7

그리고 PHP 7에서 mysql.so 확장 사용하기

또 다른 문제는 내 작업용 컴퓨터에는 PHP 7이 설치돼 있는데 PHP 7에서는 mysql.so 확장이 삭제됐다는 점이었다. (PHP 7에서는 mysql.so 대신 mysqli.so가 지원된다. 그 전까지는 mysqli.so와 mysql.so가 같이 지원이 됐고, mysql.so를 쓰면 보안 경고가 발생했다.) 코드이그니터 2는 mysql.so 확장을 쓰기 때문에 PHP 7 버전에서는 실행이 안 된다!

로컬 환경과 배포 환경을 비슷하게 맞추는 것이 좋다. 리눅스를 다 지우고 옛날 우분투 배포판이라도 깔아서 작업을 할까하는 생각을 잠깐 했다. 아니면 번거롭더라도 버추얼박스를 써야 하는 것일까? 한참 고민을 하고 있는데, 이번에도 지혜로운 직장 동료가 “그냥 mysql.so를 다운로드해서 쓰면 안 돼요?”라는 것이다. “PHP 7 환경에 맞게 컴파일 된 녀석을 구할 수 있을까요…?” 라고 답하는 도중에 응? 그냥 컴파일을 직접 하면 되잖아? 하는 생각이 스쳤다. 그래서 찾아보니 과연 방법을 찾을 수 있었다.

이 방법은 https://ckon.wordpress.com/2015/08/06/put-mysql-functions-back-into-php-7/ 에 설명된 방법이다.

먼저 https://github.com/php/pecl-database-mysql 소스코드를 클론한다.

git clone https://github.com/php/pecl-database-mysql mysql --recursive

아래 명령을 차례로 입력해 컴파일을 하고

cd mysql
phpize
./configure
make

관리자 권한으로 설치를 한다.

sudo make install

그러면 라이브러리가 설치된 경로가 터미널에 출력된다. 내가 사용중인 만자로 리눅스의 경우에는 사용자 디렉토리 아래($HOME/mysql/mysql.so)에 설치되던데, 리눅스 환경마다 설치되는 곳이 다른 듯하다.

라이브러리 파일이 위치한 경로를 확인한 후, php.ini 파일을 수정한다. 만자로 리눅스에서는 /etc/php/php.ini 파일이다.

sudo vi /etc/php/php.ini

extension 들이 있는 곳 중간에 extension=/home/bakyeono/mysql/mysql.so 와 같이 로드할 확장 라이브러리 파일 경로를 적어주면 된다.

/etc/php/php.ini
================

...
extension=/home/bakyeono/mysql/mysql.so
...

이렇게 하고 httpd(또는 apache2)를 재시작해주면 PHP 7에서도 코드이그니터 2가 잘 실행되었다.

sudo systemctl restart httpd.service