서버 운영/APM 서버 구축

phpMyAdmin 4.6.6deb5와 PHP 7.2 간 호환성 문제 해결 - Warning in ./libraries/sql.lib.php#613

씨실과 날실 2019. 6. 16. 09:00

저는 이 글을 작성하는 시점에 아래와 같은 작업 환경을 구축하고 있습니다.

[작업환경]

가상머신 : VirtualBox 6.0.8

OS : Ubuntu 18.04.2

Apache2 : Apache/2.4.29 (Ubuntu)

PHP7 : PHP 7.2.19-0ubuntu0.18.04.1

MariaDB : mysql  Ver 15.1 Distrib 10.3.15-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

phpMyAdmin : phpMyAdmin 4.6.6deb5

위 환경은 한 가지 문제를 안고 있습니다. 그것은 바로 phpMyAdmin과 PHP 간 호환성 문제입니다.

지금까지 제 연재를 읽거나 혹은 따라 작업하신 분들은 아래와 같은 그림을 보신 적이 있을 겁니다.

위 그림을 보면 아래와 같은 경고 문구를 확인할 수 있습니다.

Warning in ./libraries/sql.lib.php#613
count(): Parameter must be an array or an object that implements Countable

phpMyAdmin을 이용해 각 테이블을 확인할 때마다 위와 같은 화면을 보게 되는데요. 솔직히 저는phpMyAdmin을 깔고 이 현상을 처음 접했을 때는 곧 고쳐지겠거니 하고 큰 관심을 두지 않았습니다. DB 백업 등 작업에서 커다란 문제를 확인하지 못하였고 phpMyAdmin을 이용하기 보다는 터미널을 통해 작업하는 경우가 많아 큰 불편을 겪지 않았기 때문에 신경을 별로 쓰지 않았던 것이지요.

그러나 우분투 18.04의 APT 저장소에는 아직까지도 업데이트가 없습니다.

study@study-VirtualBox:~$ sudo apt install phpmyadmin

현재 위 명령을 통해 우분투 저장소에서 phpMyAdmin을 설치하면 버전 4.6.6deb5가 설치됩니다. 그런데 해당 버전은 현재 서버에서 주류로 쓰이는 PHP 7.2와 호환성이 낮습니다.

위 화면을 직접 확인하시려면 아래 링크를 방문하시기 바랍니다.

위 그림처럼 이미 2018년 4월에 해당 버그가 보고되었습니다만 우분투 저장소에서는 아직 이 문제를 해결한 버전이 올라오지 않고 있습니다. 해당 버그는 phpMyAdmin 버전 4.7.4 이상에서 해결이 되었습니다.

따라서 해당 문제를 근본적으로 해결하는 방법은 시스템에 깔린 phpMyAdmin을 4.7.4 이상으로 업그레이드해주는 것입니다.

2019년 6월 4일, phpMyAdmin 공식 사이트(https://www.phpmyadmin.net/)에서 phpMyAdmin 4.9.0.1을 공개하였습니다. 이 글을 작성하는 시점에서 가장 최신 버전입니다.

이 버전으로 업그레이드해주시면 문제가 해결될 뿐만 아니라 사용상, 기능상 많은 이점을 얻을 수 있습니다.  따라서 최신 버전으로 업그레이드하실 것을 강력히 권고드립니다. 참고로 업그레이드 방법은 조만간 올려 드리도록 하겠습니다.

phpMyAdmin 공식 다운로드 페이지

https://www.phpmyadmin.net/downloads/

그러나 여러 이유로 업그레이드가 어려운 분들이 있으실 겁니다. 이런 분들을 위하여 임시 방편을 알려드리도록 하겠습니다. 그러나 어디까지나 임시 방편이며 이미 완성된 소스를 수정하는 것이기 때문에 문제가 발생할 수 있음을 감안하시어 소스 파일을 수정하시기 전에 해당 파일을 백업해두시기 바라며, 만약 가상머신을 이용 중이신 분은 스냅샷을 활용하여 백업하시기 바랍니다.

제가 알려드리는 방법은 스택오버플로에 올라 온 답변입니다. 아래 링크를 참고 하였습니다.

참고로 스택오버플로(https://stackoverflow.com/)는 전세계 개발자들이 질문과 답변을 올리는 프로그램 개발 관련 Q&A 사이트입니다. 혹시 컴퓨터 프로그램과 관련하여 문제가 발생한 경우 이 사이트에서 유사 혹은 동일한 문제에 대하여 이미 올라 온 답변을 찾거나 문제를 올려 조언을 구할 수 있습니다.

/usr/share/phpmyadmin/libraries/sql.lib.php 원본 파일을 백업해 놓고 아래와 같이수정해줍니다.

 || (count($analyzed_sql_results['select_expr'] == 1)

위 구문을 아래와 같이 수정해줍니다.

 || (count($analyzed_sql_results['select_expr']) == 1

수정 후 저장한 다음 phpMyAdmin에 접속하여 아무 테이블이나 읽어봅시다. 이제 아무 문제가 없을 겁니다.