Zeroboard 5와 Mediawiki 를 위해서 UTF-8 서버로 이전한지도 꽤 시간이 흘렀습니다. 정작 ZB5는 IE7 과 문제 때문에 못 쓰고, Mediawiki 는 다른 서버에 설치해버렸군요.
덕분에 기존에 제가 쓰던 서비스들을 UTF-8에서 동작하도록 모조리 수정해야했습니다. 이 장대한(?) 삽질기를 간략한 기록으로 정리하려고 합니다. 혹시 UTF-8로 이전하신 분들께 도움이 됐으면 합니다.
주의 : 본 내용은 리눅스 시스템에 친숙한 분들께 참고용으로 쓴 것입니다. 본 내용에는 오류가 있을 수 있으며, 이에 관련한 피해에 대해서는 각자 본인 책임하에 진행해야 합니다.
-
MySQL을 백업합니다.
1
mysqldump -c -ufoobar -p foobar > foobar.sql
-
~/www
디렉토리를 백업합니다.1 2
cd ~ tar -cvzf foobar.tar.gz ~/www
-
모두 PC로 다운로드 받아둡니다.
-
Cafe24에 가서 이전을 신청합니다.
-
이전 완료 메일이 도착하면 새 UTF-8 서버로 접속해서 코드를 확인합니다.
1
set | grep LANG
-
문서 편집기를 이용해서 foobar.sql 파일내에 있는 테이블의 인코딩을 EUC-KR 에서 UTF-8 로 바꿉니다.
-
MySQL 덤프를 업로드 합니다.
-
foobar.sql 파일의 인코딩을 변환합니다.
1
/usr/bin/iconv -c -f euc-kr -t utf-8 foobar.sql > foobar_utf8.sql
-
MySQL 덤프를 넣습니다.
1
mysql -ufoobar -p foobar < foobar.sql
-
PC에 있는
foobar.tar.gz
을 풉니다. -
FileZilla 와 같이 강제로 UTF-8 을 사용할 수 있는 FTP 프로그램을 사용해서 푼 파일들을 서버로 업로드 합니다.
convmv
를 사용하면 서버에서 할 수도 있을 것 같지만 Cafe24에는 해당 프로그램이 안 보입니다. -
우선 웹에 접속해서 페이지가 열리는지 확인합니다.
-
이제 각 서비스를 수정합니다. 제가 사용하는 phpBB2와 JSBoard만 설명드리는 것을 양해 부탁드립니다. 아래와 같은 내용으로
utf8php.sh
라는 스크립트를 하나 만듭니다.*.php
부분을*.tpl
과*.template
로 변경해서 각각utf8tpl.sh
,utf8template.sh
로 스크립트를 만릅니다.1 2 3 4 5 6 7 8 9
#!/bin/sh for i in $( find . -name "*.php" ); do if [ -f $i ] then /usr/bin/iconv -f UHC -t utf-8 -o $i.tmp $i mv -f $i $i.bak mv -f $i.tmp $i fi done
-
각각 실행 권한을 주세요.
1
chmod 755 utf8*.sh
-
phpBB2 디렉토리로 이동한 후에
utf8php.sh
와utf8tpl.sh
스크립트를 실행합니다. -
JSBoard 디렉토리로 이동한 후에
utf8php.sh
와utf8template.sh
스크립트를 실행합니다. -
phpBB2의
./language/lang_korean/lang_main.php
파일의 41 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.1
$lang['ENCODING'] = 'utf-8';
-
Attachment Mod 를 사용하신다면
./download.php
파일의 187 번째줄을 아래와 같이 편집합니다.1
header('Content-Disposition: inline; filename="' . urlencode($real_filename) . '"');
-
phpBB2가 정상적으로 보이는지 확인합니다.
-
JSBoard의
./act.php
파일의 568, 573 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.1
header("Content-Disposition: attachment; filename=".urlencode($dn['name']));
-
JSBoard의
./include/LANG/ko.php
파일의 4 번째줄을 아래와 같이 편집합니다.1
$langs['charset'] = "UTF-8";
-
JSBoard의
./include/check.php
파일의 264~269 줄을 주석처리합니다.1 2 3 4 5 6 7 8 9
/* # file 이름에서 특수문자가 있으면 에러 출력 # 한글 영역과 한자 영역은 허락 함 if ( preg*replace ("/[\w\d.*\-]|[\xB0-\xC8\xCA-\xFD][\xa1-\xfe]/",'', urldecode ($f)) ) { print_error($langs['act_de'],250,150,1); exit; } */
-
JSBoard의 ./include/check.php 파일의 242 줄에 아래 코드를 추가합니다.
1
$list['bofile'] = urlencode($list['bofile']);
-
JSBoard의 ./include/parse.php 파일의 327~328 번째줄을 아래와 같이 편집합니다.
1
$s = mb_substr($s,0,$l, "UTF-8"); // $s = preg_replace("/(([\x80-\xFE].)*)[\x80-\xFE]?$/","\\1",$s);