일전에 php-fpm을 이용하여 php-5.3.29와 php-7.4.4를 하나의 서버에 모두 설치하고 두 버전을 동시에 사용가능하게 설정했었다. 오래전에 만들어진 홈페이지를 호스팅하기 위해서 php 5.3을 설치했는데, 알고보니 이 프로그램은 php5.3도 아닌 php5.2로 만들어진 것이다. 7.x 버전이 사용되는 요즘에 5.2라니..우선 php5.2.17을 설치해 보기로 했다.
서버에 설치한 리눅스는 CentOS-7-x86_64-Minimal-1908.iso이다.
컴파일 옵션은 아래와 같다.
./configure --prefix=/usr/local/php52 --with-config-file-path=/etc/php52 --with-config-file-scan-dir=/etc/php52/php.d --with-libdir=lib64 --with-mysql --with-mysqli --enable-fastcgi --enable-force-cgi-redirect --enable-mbstring --disable-debug --disable-rpath --with-bz2 --with-curl --with-gettext --with-iconv --with-openssl --with-gd --with-mcrypt --with-pcre-regex --with-zlib
처음 컴파일 할 때 mcrypt.h not found. Please reinstall libmcrypt 오류가 발생했는데 libmcrypt-devel을 설치하면 해결된다. yum으로 libmcrypt-devel이 설치되지 않는다면, epel 저장소가 설치되어 있지 않는지 확인해야 한다.
이제 컴파일 / 설치를 할 차례이다. 무슨 일인지 configure에서는 문제가 없지만 정작 컴파일에서는 오류가 발생한다.
해결책은 https://forums.centos.org/viewtopic.php?t=53046 에서 찾았다.
1. yum install pathch로 patch를 먼저 설치하자.
2. yum install wget로 wget도 설치하자.
3. php5.2patch파일을 다운받자. (wget https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt)
4. 혹시 몰라서 패치파일의 내용을 아래에 텍스트로 저장해 놓았다. 파일명은 php-5.2.17.patch가 좋겠다.
5. 이제 패치를 적용시켜보자. # patch -p0 < ./php-5.2.17.patch
6. 지금까지의 작업내용은 아래와 같다.
php-5.2.17.patch의 내용
--- ext/dom/node.c 2012-08-06 17:49:48.826716692 +0800
+++ ext/dom/node.c 2012-08-06 17:52:47.633484660 +0800
@@ -1895,9 +1895,17 @@ static void dom_canonicalization(INTERNA
RETVAL_FALSE;
} else {
if (mode == 0) {
+#ifdef LIBXML2_NEW_BUFFER
+ ret = xmlOutputBufferGetSize(buf);
+#else
ret = buf->buffer->use;
+#endif
if (ret > 0) {
+#ifdef LIBXML2_NEW_BUFFER
+ RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1);
+#else
RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
+#endif
} else {
RETVAL_EMPTY_STRING();
}
--- ext/dom/documenttype.c 2012-08-06 18:02:16.019640870 +0800
+++ ext/dom/documenttype.c 2012-08-06 18:06:16.612228905 +0800
@@ -205,7 +205,13 @@ int dom_documenttype_internal_subset_rea
if (buff != NULL) {
xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
xmlOutputBufferFlush(buff);
+
+#ifdef LIBXML2_NEW_BUFFER
+ ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff),
+ xmlOutputBufferGetSize(buff), 1);
+#else
ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1);
+#endif
(void)xmlOutputBufferClose(buff);
return SUCCESS;
}
--- ext/simplexml/simplexml.c 2012-08-06 18:10:44.621017026 +0800
+++ ext/simplexml/simplexml.c 2012-08-06 18:12:48.016270419 +0800
@@ -1417,7 +1417,12 @@ SXE_METHOD(asXML)
xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 0, ((xmlDocPtr) sxe->document->ptr)->encoding);
xmlOutputBufferFlush(outbuf);
+#ifdef LIBXML2_NEW_BUFFER
+ RETVAL_STRINGL((char *)xmlOutputBufferGetContent(outbuf),
+ xmlOutputBufferGetSize(outbuf), 1);
+#else
RETVAL_STRINGL((char *)outbuf->buffer->content, outbuf->buffer->use, 1);
+#endif
xmlOutputBufferClose(outbuf);
}
} else {
다시 컴파일 시도중에 오류발생 /usr/bin/ld: cannot find -lltdl 이건 libtool-ltdl-devel을 설치해야 한다. 설치 후 가상서버를 종료한 후에 core를 1에서 4개로, RAM을 1GB에서 4GB로 올려보았다. 컴파일 소요시간이 생각보다 길어서 (VPS의 1-core, 1GB-RAM 보다는 조금 빨랐다) 살짝 올려본 것이다. 컴파일은 성공적으로 끝났으며 컴파일 속도는 따로 측정하지는 않았지만 체감상 4배이상은 되는 듯 하다.
php 5.2.17이 설치는 성공했지만 웹서버와의 연동이 안되는 문제를 아직 해결하지 못했다. php 5.2.17은 아득한 옛날(2011년도 1월)에 나왔다. CentOS 5.5가 2010년 5월에 나왔으니 대략 이 버전들이 서로 궁합이 잘 맞으려나?
여하튼 apache 웹서버에서 php를 실행시키기 위해서는 일전에 사용해봤던 php-fpm외에도 fcgid, fastcgi, proxy_fcgi와 php-fpm 함께사용하는 방법이 있다. (참조 : https://cwiki.apache.org/confluence/display/httpd/php) 가장 뛰어난 방법이라는 proxy_fcgi는 httpd 2.4 이상의 버전에서만 사용 가능하다고 나온다. fastcgi와 fcgid 모두 실패했다. apache의 버전을 2.2로 낮춰서 다시 테스트 해 봐야겠다...
'Linux > APM' 카테고리의 다른 글
[CentOS] MariaDB(Mysql), httpd 삭제하기 (0) | 2020.06.03 |
---|---|
[CentOS7] php 5.2 + apache 2.2 설치 및 연동 (0) | 2020.04.27 |
[CentOS7] mysql 5.1.x 설치하기 (2) | 2020.04.24 |
한 대의 리눅스 서버에 두 개 이상의 버전이 다른 php(5.3/7.4)설치 (2) | 2020.03.26 |
php 버전 변경 후 오류 (5.X <-> 7.X) (0) | 2020.02.29 |
댓글