본문 바로가기

centos7에서 php 5.6.x를 php 7.x로 업그레이드 하기

개인적으로 뭔가를 업그레이드를 하는 것을 별로 좋아하진 않는다.


휴대폰의 os 버전이건 서버건 뭐건 업그레이드나 바꾸는 것을 좋아하지 않는다.


그래서 가급적 미루고 미루다가 못 버틸 때 바꾸는 습관이 있다.


이번은 리눅스 centos7에서 php 5.6.x를 php 7.x로 업글 하는 방법을 알아보았다.

사실은 하지 않고 그냥 쓸려고 그랬다.


특히 php 버전을 올리게 되면 무슨일이 일어날지 두려웠다.


분명히 지원을 안하거나 없어진 함수가 있을 것이고 비슷한 이름이라도 달라진 부분이 있을 것이다.


centos7에서 php 5.6.x를 php 7.x로 업그레이드 하기


업그레이드 자체가 무서운것이 아니라 바꾸고 난뒤에 그 서버에서 잘 돌아가고 있던 아이들이 갑자기 에러를 뱉어내거나 디비에서 데이터를 못가져오거나 연쇄작용으로 줄줄이 사탕처럼 되는게 귀찮았고 바쁜데 그걸 또 하나하나 에러메세지를 보며 디버깅 하고 바꾸는게 번거로웠다.


그래서 무슨 일이 있을지 몰라 미뤘는데 결국 해야 하는 일이 생겼다.


여기저기서 버전이 낮다 올려야 한다 등등의 경고 메세지를 많이 보게 되고 쓰는것들이 7x 이하는 지원하지 않는등


사실 하고 난 이후는 크게 할게 없긴 해서 다행이긴 했다.


잡설이 길었다. 그럼 업그레이드를 하는 방법을 알아보자.


환경이 조금만 틀려도 다른결과가 나오는게 허다하므로 내 기준으로 보자.


OS 버전 : cat /etc/centos-release, cat /etc/redhat-release


글자 그대로 CentOS Linux release 7.9.2009 ( Core )



다음 현 php 버전 php -v

PHP 5.6.40 이고 Zend Engine v2.6.0



이제 이걸 7.x대로 올릴려고 한다.


참조한 사이트 두개다.


https://www.mysterydata.com/how-to-upgrade-php-5-6-to-php-7-3-on-centos-vestacp/


https://linuxconfig.org/how-to-install-or-upgrade-to-php-7-on-centos-linux-server


참조까지도 아니고 그냥 하라는대로 시키는대로 쭉 하면 나같은 경우는 별 사이드 이펙트 없이 완료 되었다.


1.레포 설치

OS버전에 따라 다른데 난 centos 7이니까 


wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm

rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm


금방 받아진다.


2.yum install yum-utils

yum-config-manager --enable remi-php73

yum-config-manager를 치면 뭐가 좌르르 뜬다.


3.yum update -y

한동안 업뎃을 안해서 그런건지 한참 걸린다.


500개가 넘게 뭔가를 받고 한다. 다 이럴 필요가 있나 싶기도 한데 걍 시키는 대로 해버렸다.



참조 했던 뒤쪽 링크는 또 좀 다르다.


다시 말하지만 난 첫번째 링크로 이상없이 마무리 되었다.


양이 많아서 인지 clean up되고 나서 준비 과정이 한창 걸린다. 서버가 뻗은 줄


아무튼 여기까지가 간단하게 끝이다.


그다음 버전을 찍어본다 다시


php -v


버전 7.3.25에 zend는 3.3.25로 바뀌었다.



설치를 실패하거나 문제가 발생할 땐 아래를 해라고 한다. 난 아직 이것은 하지 않았다.


yum-config-manager --disable remi-php56

yum-config-manager --disable remi-php70

yum-config-manager --disable remi-php71

yum-config-manager --disable remi-php72


이전의 군더더기가 남아 있을수 있겠지만 우선 얼른 해야 되서 설치만 무사히 되길 기도해 본다.


이렇게 해서 php 버전업은 완료 되었다.


다음은 기존 작성한 코드를 확인해 본다.


잘 돌아가던 페이지를 브라우저에서 주소를 찍어 본다. 갑자기 에러가 나고 페이지가 안열린다.


우려하던 일이 발생했다. 500 에러를 내뿜으면서 말이다.


30분전만 해도 잘 돌아가던 페이지였는데..



php 에러 로그가 나오게 설정하고 코드를 연 뒤 화면 갱신을 해본다.


크게 문법적으로 벗어나는걸 한적이 없는데 이런 에러는 기본적으로 쓰던게 뭐가 바뀌거나 없어진것이다.


Fatal error : Uncaught Error: Call to undefined function mysql_connect();



제거가 되었다.


다행이도 대부분 에러는 대응을 할 수 있는 부분이라 시간이 오래걸리진 않았다.


php 5.x에서 php 7.x 시 바꿔 줘야 할 부분.


- mysql_connect -> mysqli_connect

- mysql_select_db('디비명', $con) -> mysqli_select_db( $con, '디비명')

- mysql_query     -> mysqli_query( $con, '쿼리' );

-- 에러 : mysqli_query() expects at least 2 parameters, 1 given in ~~~


- mysql_fetch_array -> mysqli_fetch_array();

-- 에러 : - Uncaught Error: Call to undefiend function mysql_fetch_array()


- mysql_num_rows() -> mysqli_num_rows()


- mysql_real_escape_string ->mysqli_real_escape_string( $con, '~~~' )


대부분 파라메터가 부족하거나 넣는 위치가 두개가 바뀌어서 에러나거나 없어져서 대체해야 하는 경우라서 다행이였다.


혹시나 해서 phpmyadmin도 실행해본다.


이쪽은 이상이 없다.


디비도 몇가지 테스트 해보고 쿼리도 해보고 아주 잔잔하게 나는 에러들도 다 수정을 했다.


그리고 안열렸던 페이지를 다시 확인을 해보니 이제 이상없이 잘 나온다.


차분차분 천천히 하였기 때문에 생각보다 시간은 더 걸렸다. 


명령어 치고 기다리고 명령어 치고 기다리고 에러난 거 찾아서 고치고


클래스 만들어 놓은거 열어보고 날코딩으로 한거 열어보고 대부분 디비 접속이나 쿼리 관련이 많았는데


정신을 놓고 작업을 했던지 숨어서 함수밖으로 나온 잊고 있었던 숨어 있는 mysql_query도 많이 마주쳤다.


이렇게 업그레이드 했으니 버전이 낮아서 못했던 것들을 좀 해봐야 겠다.


항상 서버에서 뭔가를 작업을 할 때는 긴장이 되긴 한다.