그누보드4 게시글 관련 자료만 복사하고자 할때 (2017-07-02 수정)

페이지 정보

profile_image
작성자 검은지구
댓글 0건 조회 1,240회 작성일 17-06-30 22:28

본문

그누보드4 를 업그레이드할때  디자인 등 새롭게 작업후 최종 게시글 이전하고자 할때
단순 이전이 아닌 리뉴얼의 경우에는 기존 그누보드4를 운영하면서 리뉴얼을 하게 됩니다.
이때 새로운 게시판 및 설정 등을 모두 마무리한후 최종적으로 게시글을 이전하고자 할때 사용합니다.

가급적 게시판 추가되지 않은 상태에서 g4_import.php 를 사용해서 한번에 이전하는 것이 좋습니다.
아래 내용은 부득이한 경우에만 사용하세요

복사 대상은 게시글 , 첨부파일 , 새글 , 추천글 , 스크랩 입니다.


2017-06-30  wr_trackback  필드가 그누보드4에서는 존재했으나, 그누보드5.0b13 부터 삭제되서 이것으로 인한 글 복사에 오류가 확인되었습니다.
그누보드5의 게시판에 wr_trackback 필드를 추가하도록 변경했습니다.


1. 그누보드4 설치 및 운영


2. 그누보드5 설치후 디자인 적용 및 게시판 설치 운영


3. 그누보드5 디자인 및 프로그램 작업 완료


4. 그누보드5 / g4_import.php 실행
회원 및 각종 데이타 복제됨 / 게시판은 이미 생성된 상태이므로 복제 안됨


5. 그누보드4 게시글을 복제하기 위해 아래 과정을 진행


6. 그누보드5 / g4_import_board.php  파일생성

<?php
include_once('./_common.php');
include_once(G5_LIB_PATH.'/connect.lib.php');
include_once(G5_LIB_PATH.'/outlogin.lib.php');

$g5['title'] = '그누보드4 DB 데이터 이전';
include_once(G5_PATH.'/theme/basic/head.sub.php');

//if(get_session('tables_copied') == 'done')
//    alert('DB 데이터 변환을 이미 실행하였습니다. 중복 실행시 오류가 발생할 수 있습니다.', G5_URL);

if($is_admin != 'super')
    alert('최고관리자로 로그인 후 실행해 주십시오.', G5_URL);
?>
<link rel="stylesheet" href="<?php echo G5_URL; ?>/theme/basic/css/default.css?ver=<?php echo G5_CSS_VER; ?>">
<style>
#g4_import p {padding:0 0 10px;line-height:1.8em}
#g4_import_frm {margin:20px 0 30px;padding:30px 0;border:1px solid #e9e9e9;background:#f5f8f9;text-align:center}
#g4_import_frm .frm_input {background-color:#fff !important}
#g4_import_frm .btn_submit {padding:0 10px;height:24px}
</style>

<!-- 상단 시작 { -->
<div id="hd">
    <div id="hd_wrapper">

        <div id="logo">
            <a href="<?php echo G5_URL ?>">/logo.jpg" alt="<?php echo $config['cf_title']; ?>"></a>
        </div>

        <ul id="tnb">
            <?php if ($is_member) {  ?>
            <?php if ($is_admin) {  ?>
            <li><a href="<?php echo G5_ADMIN_URL ?>"><b>관리자</b></a></li>
            <?php }  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/member_confirm.php?url=<?php echo G5_BBS_URL ?>/register_form.php">정보수정</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/logout.php">로그아웃</a></li>
            <?php } else {  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/register.php">회원가입</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/login.php"><b>로그인</b></a></li>
            <?php }  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/qalist.php">1:1문의</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/current_connect.php">접속자 <?php echo connect(); // 현재 접속자수  ?></a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/new.php">새글</a></li>
        </ul>
    </div>
</div>

<hr>

<div id="wrapper">
    <div id="container">
        <div id="container_title"><?php echo $g5['title'] ?></div>

        <div id="g4_import">
            <p>
                게시판 생성후 그룹과 게시글 자료만 복사하기 위해 실행합니다.<br>
            </p>
            <p>프로그램을 실행하시려면 그누보드4의 config.php 파일 경로를 입력하신 후 확인을 클릭해 주십시오.</p>

            <form name="fimport" method="post" action="./g4_import_board_run.php" onsubmit="return fimport_submit(this);">
            <div id="g4_import_frm">
                <label for="file_path">config.php 파일 경로</label>
                <input type="text" name="file_path" id="file_path" required class="frm_input required">
                <input type="submit" value="확인" class="btn_submit">
            </div>
            </form>

            <p>
                경로는 그누보드5 설치 루트를 기준으로 그누보드4의 config.php 파일의 상대경로입니다.<br>
                예를 들어 그누보드4를 웹루트에 설치하셨고 그누보드5를 g5라는 하위 폴더에 설치하셨다면 입력하실 경로는 ../config.php 입니다.
            </p>

        </div>

        <script>
        function fimport_submit(f)
        {
            return confirm('그누보드4의 DB 게시글 데이터를 이전하시겠습니까?');
        }
        </script>

    </div>
</div>

<script>
$(function() {
    // 폰트 리사이즈 쿠키있으면 실행
    font_resize("container", get_cookie("ck_font_resize_rmv_class"), get_cookie("ck_font_resize_add_class"));
});
</script>

<?php include_once(G5_PATH.'/theme/basic/tail.sub.php'); ?>


7. 그누보드5 / g4_import_board_run.php  파일생성

<?php
include_once('./_common.php');

ob_end_clean();

include_once(G5_LIB_PATH.'/connect.lib.php');
include_once(G5_LIB_PATH.'/outlogin.lib.php');

set_time_limit ( 0 );
ini_set('memory_limit', '50M');

$g5['title'] = '그누보드4 DB 데이터 이전';
include_once(G5_PATH.'/theme/basic/head.sub.php');

if(empty($_POST))
    alert('올바른 방법으로 이용해 주십시오.', G5_URL);

//if(get_session('tables_copied') == 'done')
//    alert('DB 데이터 변환을 이미 실행하였습니다. 중복 실행시 오류가 발생할 수 있습니다.', G5_URL);

if($is_admin != 'super')
    alert('최고관리자로 로그인 후 실행해 주십시오.', G5_URL);

$g4_config_file = trim($_POST['file_path']);

if(!$g4_config_file)
    alert('config.php 파일의 경로를 입력해 주십시오.');

$g4_config_file = preg_replace('#/config.php$#i', '', $g4_config_file).'/config.php';

if(!is_file($g4_config_file))
    alert('입력하신 경로에 config.php 파일이 존재하지 않습니다.');

$is_euckr = false;
?>
<script>
// 새로고침 방지
function noRefresh()
{
    /* CTRL + N키 막음. */
    if ((event.keyCode == 78) && (event.ctrlKey == true))
    {
        event.keyCode = 0;
        return false;
    }
    /* F5 번키 막음. */
    if(event.keyCode == 116)
    {
        event.keyCode = 0;
        return false;
    }
}

document.onkeydown = noRefresh ;
</script>
<link rel="stylesheet" href="<?php echo G5_URL; ?>/theme/basic/css/default.css?ver=<?php echo G5_CSS_VER; ?>">
<style>
#g4_import_run {}
#g4_import_run ol {margin: 0;padding: 0 0 0 25px;border: 1px solid #E9E9E9;border-bottom: 0;background: #f5f8f9;list-style:none;zoom:1}
#g4_import_run li {padding:7px 10px;border-bottom:1px solid #e9e9e9}
#g4_import_run #run_msg {padding:30px 0;text-align:center}
</style>

<!-- 상단 시작 { -->
<div id="hd">
    <div id="hd_wrapper">

        <div id="logo">
            <a href="<?php echo G5_URL ?>">/logo.jpg" alt="<?php echo $config['cf_title']; ?>"></a>
        </div>

        <ul id="tnb">
            <?php if ($is_member) {  ?>
            <?php if ($is_admin) {  ?>
            <li><a href="<?php echo G5_ADMIN_URL ?>"><b>관리자</b></a></li>
            <?php }  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/member_confirm.php?url=<?php echo G5_BBS_URL ?>/register_form.php">정보수정</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/logout.php">로그아웃</a></li>
            <?php } else {  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/register.php">회원가입</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/login.php"><b>로그인</b></a></li>
            <?php }  ?>
            <li><a href="<?php echo G5_BBS_URL ?>/qalist.php">1:1문의</a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/current_connect.php">접속자 <?php echo connect(); // 현재 접속자수  ?></a></li>
            <li><a href="<?php echo G5_BBS_URL ?>/new.php">새글</a></li>
        </ul>
    </div>
</div>

<hr>

<div id="wrapper">
    <div id="container">
        <div id="container_title"><?php echo $g5['title'] ?></div>

        <div id="g4_import_run">
            <ol>
                <?php
                flush();
       
                // g4의 confing.php
                require($g4_config_file);
       
                if(preg_replace('/[^a-z]/', '', strtolower($g4['charset'])) == 'euckr')
                    $is_euckr = true;
       
                // group table 복사
                $columns = sql_field_names($g5['group_table']);
       
                $sql = " select * from {$g4['group_table']} ";
                $result = sql_query($sql);
                for($i=0; $row=sql_fetch_array($result); $i++) {
                    if($is_euckr)
                        $row = array_map('iconv_utf8', $row);
       
                    // 중복체크
                    $sql2 = " select count(*) as cnt from {$g5['group_table']} where gr_id = '{$row['gr_id']}' ";
                    $row2 = sql_fetch($sql2);
                    if($row2['cnt'])
                        continue;
       
                    $comma = '';
                    $sql_common = '';
       
                    foreach($row as $key=>$val) {
                        if(!in_array($key, $columns))
                            continue;
       
                        $sql_common .= $comma . " $key = '".addslashes($val)."' ";
       
                        $comma = ',';
                    }
       
                    sql_query(" INSERT INTO {$g5['group_table']} SET $sql_common ");
                }
       
                echo '<li>group table 복사</li>'.PHP_EOL;
                unset($columns);
                unset($fiels);
               
                // board 복사
                $columns = sql_field_names($g5['board_table']);
                $sql = " select * from {$g4['board_table']} ";
                $result = sql_query($sql);
                for($i=0; $row=sql_fetch_array($result); $i++) {
                    if($is_euckr)
                        $row = array_map('iconv_utf8', $row);
       
                    // 중복체크
                    $sql2 = " select count(*) as cnt from {$g5['board_table']} where bo_table = '{$row['bo_table']}' ";
                    $row2 = sql_fetch($sql2);
                   
                    //if($row2['cnt'])
                    //  continue;
                   
                    $comma = '';
                    $sql_common = '';
       
                    foreach($row as $key=>$val) {
                        if(!in_array($key, $columns))
                            continue;
       
                        $sql_common .= $comma . " $key = '".addslashes($val)."' ";
       
                        $comma = ',';
                    }
                   
                    sql_query(" INSERT INTO {$g5['board_table']} SET $sql_common ");
                    //echo "sql = INSERT INTO ".$g5['board_table']." SET ".$sql_common."<br>";
       
                    // 게시판 테이블 생성
                    $bo_table = $row['bo_table'];
                    $file = file(G5_ADMIN_PATH.'/sql_write.sql');
                    $sql = implode($file, "\n");
       
                    $create_table = $g5['write_prefix'] . $bo_table;
       
                    $source = array('/__TABLE_NAME__/', '/;/');
                    $target = array($create_table, '');
                    $sql = preg_replace($source, $target, $sql);
                   
                    // 게시글 초기화
                    $sql5 = " delete from $create_table ";
                    $result5 = sql_query($sql5);
                   
                    // 게시글 복사
                    //if(sql_query($sql, FALSE)) {
                        $write_table = $g4['write_prefix'].$bo_table;
                        $columns2 = sql_field_names($create_table);
                       
                        $sql3 = " select * from $write_table ";
                        $result3 = sql_query($sql3);
                       
                        for($k=0; $row3=sql_fetch_array($result3); $k++) {
                            if($is_euckr)
                                $row3 = array_map('iconv_utf8', $row3);
       
                            $comma3 = '';
                            $sql_common3 = '';
                           
                            foreach($row3 as $key=>$val) {
                                //if(!in_array($key, $columns2))
                                //    continue;
       
                                $sql_common3 .= $comma3 . " $key = '".addslashes($val)."' ";
                                $comma3 = ',';
                            }
                           
                            // wr_trackback 필드 추가
                            sql_query("alter table $create_table add `wr_trackback` varchar(255) NOT NULL default '' AFTER `wr_link2_hit` ", false);
                           
                            // 첨부파일개수
                            $wr_id = $row3['wr_id'];
                            $sql4 = " select count(*) as cnt from {$g4['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' ";
                            $row4 = sql_fetch($sql4);
                           
                            //echo "sql 4 = ". $sql4 ."<br>";
                           
                            $sql_common3 .= " , wr_file = '{$row4['cnt']}' ";
       
                            sql_query(" INSERT INTO $create_table SET $sql_common3 ");
                        }
       
                        echo '<li>'.str_replace(G5_TABLE_PREFIX.'write_', '', $create_table).' 게시글 복사</li>';
                    //}
                }
       
                unset($columns);
                unset($fiels);
       
                // 그외 테이블 복사
                $tables = array('board_file');
                //$tables = array('board_file', 'board_new', 'board_good', 'mail', 'memo', 'group_member', 'auth', 'popular', 'poll', 'poll_etc', 'scrap');
       
                foreach($tables as $table) {
                    $columns = sql_field_names($g5[$table.'_table']);
       
                    $src_table = $g4[$table.'_table'];
                    $dst_table = $g5[$table.'_table'];
                    $sql = " select * from $src_table ";
                    $result = sql_query($sql);
                    for($i=0; $row=sql_fetch_array($result); $i++) {
                        if($is_euckr)
                            $row = array_map('iconv_utf8', $row);
       
                        $comma = '';
                        $sql_common = '';
       
                        foreach($row as $key=>$val) {
                            //if(!in_array($key, $columns))
                            //    continue;
       
                            $sql_common .= $comma . " $key = '".addslashes($val)."' ";
       
                            $comma = ',';
                        }
       
                        $result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ");
                        //$result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ", false);
       
                        //if(!$result2)
                        //    continue;
                    }
       
                    echo '<li>'.$table.' table 복사</li>'.PHP_EOL;
                }
       
                // 그외 테이블 복사
                $tables = array('board_new', 'board_good', 'scrap');
                //$tables = array('board_file', 'board_new', 'board_good', 'mail', 'memo', 'group_member', 'auth', 'popular', 'poll', 'poll_etc', 'scrap');
       
                foreach($tables as $table) {
                    $columns = sql_field_names($g5[$table.'_table']);
       
                    $src_table = $g4[$table.'_table'];
                    $dst_table = $g5[$table.'_table'];
                    $sql = " select * from $src_table ";
                    $result = sql_query($sql);
                    for($i=0; $row=sql_fetch_array($result); $i++) {
                        if($is_euckr)
                            $row = array_map('iconv_utf8', $row);
       
                        $comma = '';
                        $sql_common = '';
       
                        foreach($row as $key=>$val) {
                            //if(!in_array($key, $columns))
                            //    continue;
       
                            $sql_common .= $comma . " $key = '".addslashes($val)."' ";
       
                            $comma = ',';
                        }
       
                        $result2 = sql_query(" delete from $dst_table ");
                        $result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ");
                        //$result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ", false);
       
                        //if(!$result2)
                        //    continue;
                    }
       
                    echo '<li>'.$table.' table 복사</li>'.PHP_EOL;
                }
       
                unset($columns);
                unset($fiels);

            echo '</ol>'.PHP_EOL;

            echo '<div id="run_msg">그누보드4 DB 게시글 데이터 이전 완료</div>'.PHP_EOL;
   
            // 실행완료 세션에 기록
            set_session('tables_copied', 'done');
            ?>
        </div>
    </div>
</div>

<script>
$(function() {
    // 폰트 리사이즈 쿠키있으면 실행
    font_resize("container", get_cookie("ck_font_resize_rmv_class"), get_cookie("ck_font_resize_add_class"));
});
</script>

<?php include_once(G5_PATH.'/'.G5_THEME_DIR.'/basic/tail.sub.php'); ?>


8. 복제된 게시글의 번호가 - 번호로 보이는 경우에는 게시판 설정의 조회수 초기화를 클릭후 실행하면 정상적으로 변경됩니다.

댓글목록

등록된 댓글이 없습니다.