마이그레이션 - 활용/ 문의
마이그레이션 관련된 질문을 올리고 답변을 받는 곳입니다.
자신의 경험을 살려 서로서로 많은 도움 부탁드릴께요. ^^
자신의 경험을 살려 서로서로 많은 도움 부탁드릴께요. ^^
글수 387
tt사이트빌더의 마이그레이션을 부탁했었는데, 제로님께 너무 큰 짐을 지워드린거 같아서...
제가 나름대로 iezn보드 마이그레이션분석을 했습니다...(--;;)
무지한 저로써는 ㅋ... 아이젠보드 쓰시는 분들이나, mysql에 능통하신분께 도움을 구하고자...
query 들어가는 부분에 테이블에서 자료 가져오는 부분만을 쪼금 수정하면 될것같은데...
* 요약 *
tt사이트 빌더의 경우... tt(설치시 디렉토리)/site/lib/dbcon.php, config.php가 존재하네요..
db설정파일의 존재여부 확인하고, 존재하면 include시키고 접속하라는 내용인듯...
위 getDBInfo결과 값($output)이 $db_info로 넘어 오는거 맞죠? ^^
게시판 목록을 가져오는데... iezn_gs(tt사이트빌더에서는 b(게시판 설치시 테이블 머릿말)_board이 있네요)테이블에서
gs_num(게시판번호?), gs_name(게시판이름?)을 g_num(?)의 오름차순으로...
이제 마이그레이션 본 작업부분인데... 어려워요...
1. 회원정보 이전...
2. 게시글 이전
iezn보드 마이그레이션툴을 한줄씩 분석하다가 도저히 이해 안되고, 대략의 감만 잡힐뿐 전혀 손댈 수 없는 부분들만
나름대로 뽑아서 올렸습니다... ^^ 머리가 터질라 그래요~~
나름대로 이것 저것 찾아보고 했는데도 많이 보자란것 같습니다...
제로님께서 만들어 놓으신 마이그레이션 툴 자체는 약간의 수정만을 통해서 대부분의 db사용보드의
게시물을 이전가능하게 해 놓으신거 같은데, 그 약간이라는 부분을 잡기가 넘 어렵네요...
마이그레이션이라던지 스킨 제작 매뉴얼이 완성되면 많은 분들이 사용하실 수 있을것 같은데..
그 전에 쪼금 도움을 주세요... 저도 꼭 제로보드 사용하고 싶어요~~ ^^
멋진 제로보드 사용하시는 분들께... 조금의 도움을 요청합니다...
테이블은 아래 첨부파일에 등록해놨구요... query부분만 약간 수정할 수 있도록 도와주세요~~
제가 나름대로 iezn보드 마이그레이션분석을 했습니다...(--;;)
무지한 저로써는 ㅋ... 아이젠보드 쓰시는 분들이나, mysql에 능통하신분께 도움을 구하고자...
query 들어가는 부분에 테이블에서 자료 가져오는 부분만을 쪼금 수정하면 될것같은데...
* 요약 *
- tt사이트 빌더의 경우 설치시 테이블 머릿말을 입력받아서 생성을 하더군요... 저의 경우 b
이렇게 게시판의 경우 (머릿말)_(게시판명)_article, article, recom, comment, stat, field 생성이 되더군요...
> 게시판 목록 테이블의 경우 (머릿말)_board
> 회원관련 테이블 m_member, m_group, m_member_data(머릿말이 붙지 않네요... 필요한것 요 3개 뿐인거 같네요)
> 각 게시판의 링크, 첨부파일은 (머릿말)_link, (머릿말)_file 요렇게 한곳에 저장되더군요... 특이하게
> 각 게시판에 comment가 있는데도, 댓글이 전체 파일로도 하나 존재하네요...(생략했어요... (머릿말)_comment_total))
(꼭 필요한 테이블 내용을 일부만 뽑아서... 첨부파일로 올립니다....)
이렇게 게시판의 경우 (머릿말)_(게시판명)_article, article, recom, comment, stat, field 생성이 되더군요...
> 게시판 목록 테이블의 경우 (머릿말)_board
> 회원관련 테이블 m_member, m_group, m_member_data(머릿말이 붙지 않네요... 필요한것 요 3개 뿐인거 같네요)
> 각 게시판의 링크, 첨부파일은 (머릿말)_link, (머릿말)_file 요렇게 한곳에 저장되더군요... 특이하게
> 각 게시판에 comment가 있는데도, 댓글이 전체 파일로도 하나 존재하네요...(생략했어요... (머릿말)_comment_total))
(꼭 필요한 테이블 내용을 일부만 뽑아서... 첨부파일로 올립니다....)
DB경로 입력받음...
<div class="title">Step 1. iezn 경로 입력</div> <div class="desc"> iezn의 global.conf.php 가 설치된 경로를 입력해주세요.<br /> <br /> 예1) /home/아이디/public_html/iezn<br /> 예2) ../iezn<br /> </div>
tt사이트 빌더의 경우... tt(설치시 디렉토리)/site/lib/dbcon.php, config.php가 존재하네요..
dbcon.php 내용
<?
/*
* Description : Database connection
* Author : Kim Dong-kyu (superkdk@tt.co.kr)
* Last Modified : 2004.10.18
*/
// Protection for multiple includes
if(defined("_DBCON_")) return;
define("_DBCON_", 1);
include "config.php";
// Connect to database.
mysql_connect($cfg_mysql_host, $cfg_mysql_user, $cfg_mysql_pass);
mysql_select_db($cfg_mysql_db);
?>
config.php 내용
<?
// Protection for multiple includes
if(defined("_CONFIG_")) return;
define("_CONFIG_", 1);
// config file.
$cfg_mysql_host = "localhost";
$cfg_mysql_user = "mr0615";
$cfg_mysql_pass = "*******";
$cfg_mysql_db = "******";
// TTBOARD absolute path
$cfg_ttboard_path = "/home/hosting_users/mr0615/www/tt/site";
?>
db설정파일의 존재여부 확인하고, 존재하면 include시키고 접속하라는 내용인듯...
db정보 확인
function getDBInfo($path) {
...
if(!file_exists($config_file)) return;
@include($config_file);
// $db_config_file = DATABASE_PATH/iezn/dbconn.php 이렇게 되는 건가요?
// DATABASE_PATH는 어디서 나온건지... 위에 include시에 불려온 변수값인것같기도하고...
// 일단 $db_config_file이 존재하면 또 include시킴, 아니면 return... include 앞에 @가 어떤뜻인지.. ㅋ
$db_config_file = sprintf('%s/iezn/%s', DATABASE_PATH, 'dbconn.php');
if(!file_exists($db_config_file)) return;
@include($db_config_file);
// $db가 iezn보드에 conf.php나 dbconn.php내의 변수인지... 일단 배열로 된 값을
// $output의 각 포인터변수(?)에 공백을 제외한 값만을(trim)넣어서 return을 하는거 같고... ^^ 에고..
// 아래부분을 적당히 수정해줘야 할것 같은데... trim... 이부분을 우찌해야 할까요? ^^
$output->hostname = trim($db['iezn']['host']);
$output->userid = trim($db['iezn']['id']);
$output->password = trim($db['iezn']['passwd']);
$output->database = trim($db['iezn']['name']);
return $output;
}
위 getDBInfo결과 값($output)이 $db_info로 넘어 오는거 맞죠? ^^
DB커넥트 함수내용
// iezn보드의 db정보 파일에
function dbConnect($db_info) {
$this->connect = @mysql_connect($db_info->hostname, $db_info->userid, $db_info->password);
if(!mysql_error()) @mysql_select_db($db_info->database, $this->connect);
if($this->source_charset == 'UTF-8') mysql_query("set names 'utf8'");
return mysql_error();
}
게시판 목록을 가져오는데... iezn_gs(tt사이트빌더에서는 b(게시판 설치시 테이블 머릿말)_board이 있네요)테이블에서
gs_num(게시판번호?), gs_name(게시판이름?)을 g_num(?)의 오름차순으로...
게시판목록 구함...
$query = "select gs_num, gs_name from iezn_gs order by g_num asc"; $module_list_result = $oMigration->query($query);
이제 마이그레이션 본 작업부분인데... 어려워요...
1. 회원정보 이전...
회원목록을 제로보드XE 표준 xml로출력....
if($target_module == 'member') {
// iezn_member테이블 개수(?, 아님테이블)를 count라는 이름으로 가져옴...
$query = "select count(*) as count from iezn_member";
...
// 회원정보를 역순(오래된 순)으로 구해옴
// iezn_member테이블을 m_num(회원번호?)의 오름차순으로 가져옴...
$query = "select * from iezn_member order by m_num asc ";
$member_result = $oMigration->query($query) or die(mysql_error());
// 회원정보를 하나씩 돌면서 migration format에 맞춰서 변수화 한후에 printMemberItem 호출
while($member_info = mysql_fetch_object($member_result)) {
$obj = null;
// 일반 변수들
// 가져온 테이블을 각각 xml 표준변수에 넘겨주는거 같아요... 없을 경우에는 공백(' ')으로 넣어도 될까요?
$obj->user_id = $member_info->m_id;
...
$obj->last_login = date("YmdHis", $member_info->m_lastdate);
// 만약 최근 로그인 시간이 1971년 이전이라면 가입일과 똑같이 하라...
if($obj->last_login < '19710000000000') $obj->last_login = $obj->regdate;
$obj->signature = '';
...
$oMigration->printMemberItem($obj);
}
// 헤더 정보를 출력
$oMigration->printFooter();
2. 게시글 이전
게시글 및 댓글을... 제로보드XE 표준 xml로 출력...
} else {
// 게시물의 수를 구함
// 티티사이트빌더의 경우 b(테이블 머릿말)_%s_article, $module_id가 될것 같기도...
// 티티사이트빌더의 경우 하나의 게시판에... 머릿말_게시판이름_article,category,comment,stat,field,recom 테이블이
// 존재하는데...
$query = sprintf("select count(*) as count from iezn_board_%s_list", $module_id);
...
// 게시글은 역순(오래된 순서)으로 구함
// 젤 어려운 부분...이네요...
// 선택을 하기는 하는데... iezn_board_($module_id)_list(a)의 모두와, iezn_member(b)의 m_nick,m_name을 선택
// a의 id와 b의 m_id가 일치하는 것중에 no,sub의 내림차순으로...??,
$query = sprintf('select a.*, b.m_nick, b.m_name from iezn_board_%s_list a left join iezn_member b on a.id = b.m_id order by no desc, sub desc', $module_id);
$document_result = $oMigration->query($query);
while($document_info = mysql_fetch_object($document_result)) {
$obj = null;
$obj->title = $document_info->subject;
if($document_info->depth) $obj->title = '[re]'.$obj->title;
$obj->content = $document_info->contents;
$obj->readed_count = $document_info->hit;
$obj->voted_count = $document_info->chu_up - $document_info->chu_down;
$obj->user_id = $document_info->id;
if($document_info->m_nick) $obj->nick_name = $document_info->m_nick;
else $obj->nick_name = $document_info->nick;
...
// 게시글의 댓글을 구함
$comments = array();
$query = sprintf("select a.*, b.m_nick, b.m_name from iezn_board_%s_comment a left join iezn_member b on a.id = b.m_id where num = '%d' order by no desc, sub desc", $module_id, $document_info->num);
$comment_result = $oMigration->query($query);
while($comment_info = mysql_fetch_object($comment_result)) {
$comment_obj = null;
// 현재 사용중인 primary key값을 sequence로 넣어두면 parent와 결합하여 depth를 이루어서 importing함
$comment_obj->sequence = $comment_info->c_num;
// 제로보드4는 댓글에 depth가 없어서 parent를 0으로 세팅. 다른 프로그램이라면 부모 고유값을 입력해주면 됨
$comment_obj->parent = 0;
$comment_obj->is_secret = 'N';
$comment_obj->content = nl2br($comment_info->contents);
$comment_obj->voted_count = 0;
$comment_obj->notify_message = 'N';
$comment_obj->password = $comment_info->passwd;
$comment_obj->user_id = $comment_info->id;
if($comment_info->m_nick) $comment_obj->nick_name = $comment_info->m_nick;
else $comment_obj->nick_name = $comment_info->nick;
...
$comments[] = $comment_obj;
}
$obj->comments = $comments;
// 첨부파일 구함 (제로보드4의 경우 이미지박스 + 첨부파일1,2(..more) 를 관리
$image_header = '';
$files = array();
if($document_info->file_su>0) {
$file_list = unserialize($document_info->file);
if(is_array($file_list) && count($file_list)) {
foreach($file_list as $file_item) {
$file_obj->filename = $file_item['name'];
$file_obj->download_count = $file_item['view'];
$file_obj->file = sprintf('%s/iezn_board/%s/f3/%s',DATA_PATH,$module_id,$file_item['tmp_name']);
$files[] = $file_obj;
// 이미지 파일이라면 내용 상단에 이미지 추가
if(eregi('\.(jpg|gif|jpeg|png)$', $file_obj->filename)) $image_header .= sprintf('<img src="%s" border="0" alt="" /><br /><br />', $file_obj->filename);
}
}
}
...
}
// 헤더 정보를 출력
$oMigration->printFooter();
}iezn보드 마이그레이션툴을 한줄씩 분석하다가 도저히 이해 안되고, 대략의 감만 잡힐뿐 전혀 손댈 수 없는 부분들만
나름대로 뽑아서 올렸습니다... ^^ 머리가 터질라 그래요~~
나름대로 이것 저것 찾아보고 했는데도 많이 보자란것 같습니다...
제로님께서 만들어 놓으신 마이그레이션 툴 자체는 약간의 수정만을 통해서 대부분의 db사용보드의
게시물을 이전가능하게 해 놓으신거 같은데, 그 약간이라는 부분을 잡기가 넘 어렵네요...
마이그레이션이라던지 스킨 제작 매뉴얼이 완성되면 많은 분들이 사용하실 수 있을것 같은데..
그 전에 쪼금 도움을 주세요... 저도 꼭 제로보드 사용하고 싶어요~~ ^^
멋진 제로보드 사용하시는 분들께... 조금의 도움을 요청합니다...
테이블은 아래 첨부파일에 등록해놨구요... query부분만 약간 수정할 수 있도록 도와주세요~~
제가 이렇게 하면 되는게 맞나요?라고 질문을 드려야 맞는데.. 그 질문조차 할 수 있는 능력이 안돼서...
차차 알아가는데로 콕 찍어서 질문을 드릴테니... 위 소스에 query부분만 해석하는데 도움을 주세요~~ ^^
차차 알아가는데로 콕 찍어서 질문을 드릴테니... 위 소스에 query부분만 해석하는데 도움을 주세요~~ ^^


