XE 운영 중 php 7.4로 변경시 오류 해결

아주 오래된 국산 홈페이지 제작 툴, XE (구 제로보드)

홈페이지 운영을 위해 XE (XpressEngine, 구 제로보드) 를 사용하고 있었는데, 이 XE 1.x는 더이상 업데이트가 안된지 몇년이 지난 상태다. XE3가 새로 나왔지만 완전히 새로 만들어져서 XE1에서의 업그레이드는 불가한 상태.

대신 사용자들이 직접 XE1을 포크 떠서 계속 업데이트를 하고 있는데, 이게 바로 라이믹스
(https://rhymix.org)

라이믹스는 php 7.0 이상이 필수인데 현재 XE를 운영하고 있는 웹호스팅은 php 5.3을 사용하고 있어서, 라이믹스로 업그레이드 하고자 웹호스팅을 php 7.4로 변경을 했다.

그리고 나서 파일과 DB를 복구하고 홈페이지를 여니 돌아오는건 하얀 화면 뿐…

망했다.

아무런 에러도 나지 않은채 500 응답이 오고 화면은 백지.

우선 500에러가 나고 있으니, 무슨 에러인지부터 확인이 필요했다.

cafe24 웹호스팅 기준, php 에러를 확인하기 위해 ssh로 서버에 접속해서 www 폴더 아래의 .htaccess 파일에 아래 내용을 추가해줬다.

php_flag display_errors on

그리고 나서 다시 화면을 리프레시 하면 php 에러로그를 브라우저로 직접 볼 수 있었다.
(에러로그 노출은 보안상 취약하기 때문에 해결한 뒤에는 꼭 다시 원복해야 합니다.)

에러로그는

class 'object' not found

왜 발생하는지 좀 찾아보니, XE를 php 7.2에서 사용시 생기는 문제였다.

XE의 마지막 버전인 1.11.6 다운로드 페이지에 보면 아래와 같은 주의사항이 있다.

서버의 PHP 7.2 업그레이드 시 주의 사항

이 배포본에서는 PHP 7.2에 대한 호환성 문제를 고쳤으나,
PHP 7.2 이상의 환경에서는 PHP 7.2에 대응하지 않은 확장 기능 사용시에 문제를 겪을 수 있으므로
PHP 7.2 이상에서는 확장 기능 사용 시 주의 하시기 바랍니다.

출처 : https://xe1.xpressengine.com/index.php?mid=download&package_id=18325662&release_id=22756225

안내문에 링크되어 있는 공지(https://xe1.xpressengine.com/devlog/23249915) 를 보면 php 7.2 호환 문제는 XE 1.9.0에서 해결이 되었다고 되어 있었다.

XE 1.9.0 버전부터는 classes/config/config.inc.php 에 아래 코드가 추가가 된 것 같다.

if(version_compare(PHP_VERSION, '7.2', '<'))
{
	class_alias('BaseObject', 'Object', true);
}

그러나 난 XE의 마지막 버전인 1.11.6을 사용중인데도 문제가 발생했다.

당장 에러가 나고 있는 파일은 modules/homepage/homepage.controller.php 인데 여기에서만 여러곳에서 에러가 났고, 이걸 수정해도 다른 여러 파일에서 같은 문제가 발생했다.

해결을 위해 구글링을 좀 해보니 쉽게 터미널 명령어로 해결할 수 있는 글을 발견했다.

find ./ -name ".php" -exec sed -i 's/return\snew\sObject/return new BaseObject/g' {} \;
find ./ -name ".php" -exec sed -i 's/extends\sObject/extends BaseObject/g' {} \;

출처 : https://xetown.com/tips/1585205 의 댓글

XE가 설치된 디렉토리에서 위 명령어 두줄을 실행하면 된다.

실제로 적용해보니 더이상의 에러는 나지 않았다.

해결 끝.

댓글 남기기