php5에서 php7로 올렸을때 코퍼마인에서 발생한 문제의 처리

개인적으로 Coppermine 이라는 웹앨범을 사용중입니다. 사용 환경은 우분투 14였죠. 오늘 16으로 서버 업데이트를 하였으나, 기존 사용하던 PHP5 대신 PHP7로 업데이트가 된 것을 확인했습니다.

Coppermine은 이 업데이트에서 오동작을 일으키더군요. 바로 기존에 쓰이던 mysql_connection() 같은 함수를 사용할 수 없는 문제 였습니다. 모든 소스를 일일이 수정할 수는 없는 짓이라...  S/W 공학때 배우던 어뎁터 같은게 없을까 하고 뒤져보다 MySQL Compat 이라는걸 발견하게 되었습니다.

이를 적용하여 오류를 잡는 과정과 부수적으로 발생했던 문제들을 처리한 과정을 정리하겠습니다. 먼저 mysql과 mysqli 호환성을 위해 MySQL Compat 에 이동하여 src 폴더에 존재하는 파일을 다운로드받아 둡니다.

classes.php, constants.php, functions.php, include.php

제 시스템 기준의 사전 환경은 다음과 같습니다.
코퍼마인 버전 : 1.5.42
PHP 설정파일 경로 : /etc/php/7.0/apache2/php.ini

1. Coppermine이 설치된 경로로 이동하여 임의의 폴더를 만듭니다. 저는 /코퍼마인설치경로/include/mysql-comp 라고 만들었습니다.

2. 새로 생성한 폴더에 위에서 다운로드 받은 파일을 복사합니다. 전 그냥 귀찮아서 vi 로 파일 생성하고 소스파일 내용을 복사 & 붙여넣기로 작업했습니다.

3. /코퍼마인설치경로/include/init.inc.php 파일을 열고 <?php 아래에 다음과 같이 기술합니다.
   require('include/mysql-comp/include.php');

4. 여기까지만 해도 대부분의 기능은 모두 동작하게 됩니다.


** php.ini 파일 설정. 제꺼 기준으로만 기술합니다. 또한 수정한 옵션만 표시합니다. **
expose_php = On
max_execution_time = 10000
max_input_time = 10000
memory_limit = 1024M
post_max_size = 200M
upload_max_filesize = 200M
max_file_uploads = 30


** 저의 경우 3가지 문제가 추가로 발생하였는데, 한가지는 익명 사용자가 업로드 할때 오류가 발생하는 것과 최근 업로드 항목에서 썸네일을 클릭하였을때 없는 파일이라는 오류가 뜨는 문제 그리고 생성자 작성방식의 변경으로 인한 경고 였습니다.

A. 익명사용자 업로드 오류
   Upload file을 클릭하였을때 위와 같은 오류가 뜨는데, 이 문제를 수정하기 위해서 아래 경로로 이동하여 에디터를 사용합니다. 

   /코퍼마인설치경로/include/
   sudo vi functions.inc.php



   6036라인에 가 보시면, 위 그림의 사각형으로 그려진 코드가 있습니다. 익명사용자용 앨범리스트 조회 쿼리인데, 이게 쿼리 오류를 일으킵니다. HeidiSQL 같은곳에서 직접 돌려보면 애초에 쿼리에서 오류가 툭 하고 튀어 나오죠. 이 코드에서 DISTINCT 를 찾아 삭제합니다. 그러면 문제 해결.

** 단 DISTINCT를 사용한 이유가 있을터인데... 이를 삭제치 않으면 ORDER BY lft 구문이 문제를 일으킵니다. 이는 select의 필드리스트에 lft 를 추가해 주는 방법으로 해결 가능하며, 이것이 위에 기술한 처리 방법보다 더 안전할 수 있습니다.


B. Last additions 항목의 이미지에서 파일을 찾을 수 없는 문제
   이는 앨범 이름을 앨범 ID로 변환하지 못해 발생하는 문제로 추정됩니다. 이미지를 보는 페이지로 인자를 넘길때, 다른 앨범들은 다 album이라는 인자를 안넘기고 바로 이미지번호인 pid를 넘기는데, 이 항목 만큼은 album=lastup 이라는 값을 같이 넘깁니다.

이를 처리하는 displayimage.php에서는 앨범 id를 추적하여 적용하지만, 이 부분이 실패합니다. 그래서 그냥....  _-)  고쳤습니다.

이번에 고칠 파일은 displayimage.php 입니다. 코퍼마인이 설치된 루트폴더에 있으니 그냥 설치경로로 이동하고 수정작업을 합니다.

sudo vi displayimage.php


  296번 라인에 가면 $superCage->get->getAlpha('album'); 이 있는데, 그냥 삭제 합니다. true 조건이 필요 없어요. 이러면 잘 뜹니다.


C. 생성자 경고
  더이상 사용되지 않을 예정인 생성자 작명방식에 대한 경고가 페이지 상단에 뜨는 경우가 있습니다. 기존엔 Class명과 클래스 내에 선언된 함수명의 이름이 같으면 생성자로 인식했는데, PHP7에선 __construct 라는 이름으로 일괄 고정되나 보더라구요. 저의 경우 2개의 파일에서 경고가 나왔습니다.

/코퍼마인설치경로/include/plugin_api.inc.php
/코퍼마인설치경로/bridge/coppermine.inc.php

경고 메세지를 보면 수정할 라인정보도 뜨는데, 그곳에 가면 클래스명과 함수명이 같은 게 있음을 볼 수 있습니다. 아래 그림처럼요.


여기서 function coppermine_udb() 가 생성자인데, PHP7에선 function __construct() 로 정의해서 쓰라고 경고하는거죠. 아래와 같이 말이죠.


이러고 저장하면, 정상적으로 동작하는 것을 확인할 수 있습니다.

PS. 딴건 둘째치고 원본 소스 파일 찾는게 참 힘들었네요. -_-);;

댓글

이 블로그의 인기 게시물

11점 풀 트래킹 달성

[빼먹은거 추가+] 바이브 무선킷 연결 끊김 문제

JQuery로 테이블 행(ROW) 복사 뜨기.