제로보드에서 - 그누보드로 많은글을 변환시 다운될때.... > 그누3 팁자료실

그누3 팁자료실

제로보드에서 - 그누보드로 많은글을 변환시 다운될때.... 정보

그누호환 제로보드에서 - 그누보드로 많은글을 변환시 다운될때....

본문

^_^
제로보드에서 그누보드로 변환할때.
팁아닌 경험담 정도로만 생각해 주세요..

글수가 작은것은 잘 변환이 되는데.
1만건 이상의 글에서는 자주 다운이 되어 변환이 제대로 않되더군요..

그이유가 DB와 자료가 많을경우 옮기는 과정에서 TimeOut이 걸리는것 같아서..
소스를 조금 수정했더니 잘 되더군요.

혹시 제로보드에서 그누보드로 변환시 잘 않될때는..
========================================================
<div align=center>
<title>제로보드를 그누보드로 변환 Tool</title>
<br>
<table border=0 cellspacing=0 cellpadding=0 width=98%>
<tr>
  <td colspan=3 style=padding:15px;line-height:160%>
  제로보드를 그누보드로 변환중입니다.<br>
제로보드의 data 디렉토리내의 모든 파일을 그누보드 데이타폴더로 복사하므로 시간이 오래걸릴수 있습니다.<br>
  </td>
</tr>
</table>
</div>
<?flush()?>
<?
/*
    제로보드 4.1 pl4 -> 그누보드 3.0x 게시판 자료 변환 프로그램
    2003.4.18 일 작성
    2003.9.4 일 수정
    * 분류는 모두 일반 (1) 로 변경
*/
set_time_limit(0);

if (!$src) die ("src 값이 넘어오지 않았습니다.");
if (!$dst) die ("dst 값이 넘어오지 않았습니다.");

$zb4[host] = "localhost";
$zb4[user] = "유저명";
$zb4[pass] = "암호";
$zb4[db] = "디비명";
$zb4[dir] = "board";

$gnu[host] = "localhost";
$gnu[user] = "유저명";
$gnu[pass] = "암호";
$gnu[db] = "디비명";
$gnu[dir] = "gnu3";

$zb4[link] = @mysql_connect($zb4[host], $zb4[user], $zb4[pass]) or die("host, user, pass 오류.");
@mysql_select_db($zb4[db], $zb4[link]) or die("$zb4[db] 접속불가.");

$sql = " select * from zetyx_board_{$src} order by headnum ,arrangenum ";
$zb4[result] = mysql_query($sql);

$gnu[link] = @mysql_connect($gnu[host], $gnu[user], $gnu[pass]) or die("host, user, pass 오류.");
@mysql_select_db($gnu[db], $gnu[link]) or die("$gnu[db] 접속불가.");

// 폴더생성
@exec("mkdir $gnu[dir]/data/file/$dst");
@exec("chmod 707 $gnu[dir]/data/file/$dst");

$sql = " delete from gb_write_{$dst} ";
mysql_query($sql);

$sql = " update gb_board
            set bo_total_count = 0
          where bo_table = '$dst' ";
mysql_query($sql);

echo "<pre>";
$is = 0;
$save_num = null;
for ($i = 0; $row = mysql_fetch_array($zb4[result]); $i++) {
    //$wr_num = get_next_num($write_table, $wr_notice);

    //echo $i;
    echo ".";
    $is++;
    if($is>200) {
$is=0;
echo "\n";
    }
    flush();

    $reg_date = date("Y-m-d H:i:s", $row[reg_date]);

    $file1 = "";
    $file1_source = "";
    if ($row[file_name1] && file_exists("$zb4[dir]/$row[file_name1]")) {
        $file1 = substr(md5($i),0,8) . "_" . $row[s_file_name1];
        $file1_source = $row[s_file_name1];
        @copy("$zb4[dir]/$row[file_name1]", "$gnu[dir]/data/file/$dst/$file1");
        @chmod("$gnu[dir]/data/file/$dst/$file1", 0606);
    }

    $file2 = "";
    $file2_source = "";
    if ($row[file_name2] && file_exists("$zb4[dir]/$row[file_name2]")) {
        $file2 = substr(md5($i),0,8) . "_" . $row[s_file_name2];
        $file2_source = $row[s_file_name2];
        @copy("$zb4[dir]/$row[file_name2]", "$gnu[dir]/data/file/$dst/$file2");
        @chmod("$gnu[dir]/data/file/$dst/$file2", 0606);
    }

    if ($row[arrangenum] == 0) {
        $reply = "";
        $save_depth = 0;
        $save_reply = "";
    } else {
        if ($save_depth) {
            $reply = $save_reply;
            if ($row[depth] > $save_depth) {
                $reply .= "A";
            } else if ($row[depth] == $save_depth) {
                $ch = substr($reply, -1);
                $reply = substr($reply,0,strlen($reply)-1) . chr(ord($ch) + 1);
            } else {
                $reply = substr($reply,0,strlen($reply)-1);
                $ch = substr($reply, -1);
                $reply = substr($reply,0,strlen($reply)-1) . chr(ord($ch) + 1);
            }
        } else {
            $reply = "A";
        }

        //echo $reply;
    }

    $num = $row[headnum];

    if ($row[headnum] <= -2000000000) {
        $notice = -1;
        $num = 1;
    } else {
        $notice = 0;
    }

    if ($row[ismember]) {
        $sql1 = " select user_id from zetyx_member_table where no = '$row[ismember]' ";
        $res1 = mysql_query($sql1, $zb4[link]);
        $row1 = mysql_fetch_array($res1);
        $mb_id = $row1[user_id];
    } else {
        $mb_id = "";
    }

    // 제로보드는 HTML에 BR 태그 붙이는게 다르군요
    $html = 0;
    if ($row[use_html]) {
        if ($row[use_html] == 1) {
            $html = 2;
        } else {
            $html = 1;
        }
    }

    $subject = preg_replace("/\'/", "&#039;", $row[subject]);
    $memo = preg_replace("/\'/", "&#039;", $row[memo]);

    $sql = " insert into gb_write_{$dst}
                set ca_id = '1',
                    wr_notice = '$notice',
                    wr_html = '$html',
                    wr_secret = '$row[is_secret]',
                    wr_recv_email = '$row[reply_mail]',
                    wr_num = '$num',
                    wr_reply = '$reply',
                    wr_comment = '0',
                    wr_commentcnt = '0',
                    wr_subject = '$subject',
                    wr_content = '$memo',
                    wr_link1 = '$row[sitelink1]',
                    wr_link2 = '$row[sitelink2]',
                    wr_file1 = '$file1',
                    wr_file2 = '$file2',
                    wr_file1_source = '$file1_source',
                    wr_file2_source = '$file2_source',
                    wr_file1_download = '$row[download1]',
                    wr_file2_download = '$row[download2]',
                    wr_hit = '$row[hit]',
                    mb_id = '$mb_id',
                    wr_name = '$row[name]',
                    wr_passwd = '$row[password]',
                    wr_email = '$row[email]',
                    wr_homepage = '$row[homepage]',
                    wr_datetime = '$reg_date',
                    wr_ip = '$row[ip]',
                    wr_good = '$row[vote]',
                    wr_user_agent = '' ";
    mysql_query($sql) or die (mysql_error());

    $id = mysql_insert_id();

    if ($save_num == $num) {
        $parent_id = $save_id;
    } else {
        $parent_id = $id;
        $save_id = $id;
    }

    mysql_query(" update gb_write_{$dst} set wr_parent_id = '$save_id' where wr_id = '$id' ");

    // 게시글 1 증가
    mysql_query("update gb_board set bo_total_count = bo_total_count + 1 where bo_table = '$dst'");

    /*
    ** 코멘트
    */
    $sql2 = " select * from zetyx_board_comment_{$src} where parent = '$row[no]' order by reg_date ";
    $res2 = mysql_query($sql2, $zb4[link]);
    for ($k = 0; $row2 = mysql_fetch_array($res2); $k++) {
        $sql3 = " select user_id from zetyx_member_table where no = '$row2[ismember]' ";
        $res3 = mysql_query($sql3, $zb4[link]);
        $row3 = mysql_fetch_array($res3);
        $mb_id = $row3[user_id];

        $memo = trim(preg_replace("/\'/", "&#039;", $row2[memo]));

        $comment = $k + 1;
        $sql = " insert into gb_write_{$dst}
                    set wr_notice = '$notice',
                        wr_num = '$num',
                        wr_reply = '',
                        wr_parent_id = '$id',
                        wr_comment = '$comment',
                        wr_content = '$memo',
                        mb_id = '$mb_id',
                        wr_passwd = '$row2[password]',
                        wr_name = '$row2[name]',
                        wr_datetime = '".date("Y-m-d H:i:s", $row2[reg_date])."',
                        wr_ip = '$row2[ip]' ";
        mysql_query($sql);
    }

    mysql_query(" update gb_write_{$dst} set wr_commentcnt = '$k' where wr_id = '$id' ");

    $save_reply = $reply;
    $save_depth = $row[depth];
    $save_num = $num;

    //echo "<br>";
}
echo "</pre>";
echo "            {$i}건 변환 완료";
?>
==========================================================================================
위와 같이 소스를 변경하셔서 하면 아무 이상없이 몇만건도 잘 변환 되더군요..
허접하지만 혹시나 하는 마음에 올려봅니다.
추천
1
  • 복사

댓글 전체

>글수가 작은것은 잘 변환이 되는데.
>1만건 이상의 글에서는 자주 다운이 되어 변환이 제대로 않되더군요..
>
>그이유가 DB와 자료가 많을경우 옮기는 과정에서 TimeOut이 걸리는것 같아서..
>소스를 조금 수정했더니 잘 되더군요.

웹서버의 응답시간 설정 때문에 많은 양의 데이타를 브라우저에서 처리하면 위와 같은 문제가 발생할수있겠군요.
보통 이런것은 서버에서 직접 돌리면 TimeOut과 같은 문제는 발생하지 않습니다.

관리자님이 제공하신 변환 프로그램 첫줄에 다음과 같이 php의 경로를 설정하고 telnet 상태에서 실행하시면 됩니다.
#!/usr/local/bin/php
보드 버전도 일치되고 디비정보도 정확한데, 경로는 절대경로로 하였구요.
'src 값이 넘어오지 않았습니다.' 라는 메세지가 뜨는군요.
파일위치를 옮겨(루트.그누,제로)보아도 마찬가지입니다.
궁금하군요!!
© SIRSOFT
현재 페이지 제일 처음으로