Home     FreeBSD     Linux     MS-Window     PHP     Data Base     Utility     Phone     Etc  

   
  Category : Linux         크레이지보드를 php,mysql 보드로의 변환수정   삭제   
*** 사용법 ***

1. tranDB.tar 를 다운 받는다.
2. $ tar xvf tranDB.tar
3. $ cd tranDB
4. $ ./Install-sh
5. $ ./convGDBM2ASC sample.gdbm sample.asc
6. sample.asc 를 옮기려는 플랫폼으로 전송한다.
7. 옮기려는 플랫폼에도 1~4의 과정을 반복한다.
8. $ ./convASC2GDBM sample.asc sample.gdbm/


1장. 방법
1. tranDB 를 받아와서 크레이지에서 쓰는 gdbm 파일을 아스키
파일로 바꾼다.
2. 바뀌어진 아스키파일의 ^M(ctrl+v+m)값을 rn으로 대체한다.
3. 아스키 파일을 하나 하나의 개별적인 파일로 나눈다.
4. 나누어진 파일을 하나 하나 해석해서 mysql 게시판으로 바꾼다.

자.. 들어 갑니다..
1. tranDB 를 받아와서 크레이지에서 쓰는 gdbm 파일을 아스키
파일로 바꾼다.
컴파일 하기전에 /src 방안에 있는
convGDBM2ASC.c 에서
57라인에 qURLdecode(encdata);

_____54_ for(progress = 1; key.dptr != NULL; progress++) {
_____55_ data = gdbm_fetch(dbf, key);
_____56_ encdata = qURLencode(data.dptr);
_____57_ qURLdecode(encdata); <== 추가
_____58_ /* save */
_____59_ fprintf(fp, "%s=%sn", key.dptr, encdata);

를 추가해서 컴파일 한다.
컴파일 끝난후에
convGDBM2ASC XXXX.gdbm XXXX.asc
하면 gdbm파일이 아스키 파일로 된다.

2.바뀌어진 아스키파일의 ^M(ctrl+v+m)값을 rn으로 대체한다.

perl -p -i -e 's/rn/rn/' XXXX.asc

라고 하면 (^M)을 rn으로 바꾸어 버립니다.
그러면.. 본문은 모두 한 줄로 되죠..

3. 아스키 파일을 하나 하나의 개별적인 파일로 나눈다.
아스키 파일을 보면..
848.Date=19990906180723
100.Filename=
44.Subject=헤헤헤.. 이렇게.. 되니깐..
915.Text=안녕하세용.. 지금..rn히히.. 그렇게..rn ... ...
324.Email=oz@rrsquad.pe.kr

이처럼 되어 있기에.. 각각의 번호들을 이름으호 하는 파일로 분리 해 낸다.

--## split.pl
#!/usr/bin/perl
$infile = $ARGV[0] ;
$outdir= $ARGV[1] ;
$options = $ARGV[2] ;
open( infileH, $infile ) || die "Cannot open $fileName.n";

if ( !$options ) { &printsql() ; }
#######################
sub printsql()
{
while ( $aLine = ) {
if ( $aLine =~ /^d*.[FDESANPLTI]/ ) {
## 라인에서 1999.Text 같은 라인을 찾는다.
@arrtext = split( /./,$aLine ) ;

if ( $aLine =~ /^d*.Text/ ) {
## 라인에서 1999.Text 같은 라인을 찾는다.
$prevno = $arrtext[0];
} elsif ( $aLine =~ /^d*.[FDESANPLI]/ ) {
## 라인에서 1999.Text 같은 라인을 찾는다.
$prevno = 0 ;
}

open ( outfileH, ">>$outdir/$arrtext[0]") || die "Cannot open
$arrtext[0].n";
printf outfileH "$aLine" ;
}
close (outfileH ) ;
}
close( infileH );
}

사용 방법..
shell> ./split.pl XXXX.asc DIR

여기서 DIR 은 먼저 생성되어 있어야 한다.
즉 DIR 안에 파일들을 생성한다는 말입니다..

예..
shell> ./split.pl ㅤDIR.asc DIR

여기서 에러가 생기면 split.pl 파일안에 공백이 있어 에러가 생길수가 있습니다.
공백을 제거 하면 될거에요.

이러면 qna1 디렉토리에 숫자가 이름인 수많은 파일이 생긴다.

4. 나누어진 파일을 하나 하나 해석해서 mysql 게시판으로 바꾼다.
자 이렇게 나누어지 파일 하나로 합쳐야 할 시기이다.
밑에서 조금 고쳐야 하는 부분이 있는데..

for ( $infile = 1 ; $infile <= 5680 ;$infile++ )

여기서 $infiel <= 5680 은 DIR 디렉토리 에 있는 파일의 마지막
파일 이름 입니다. 즉,,
DIR 디렉토리에 5680이라는 파일이 가장 마지막 파일이라는 것이죠.

그리고 시간.. 즉 쓰여지 시간이 문제 인데..
크레이지는 19990909123015
식으로 저장을 합니다. 즉
1999년 09월 09일 12시 30분 15초 입니다.
저의 게시판은 unixtimestamp로 저장이 되기에 이것을 변형을
시키는 작업을 하기에는 제가 알고 있는 펄의 실력이 너무
모지랍니다..
그래서 제가 알고 있는 시간으로 그냥 넣어 버렸습니다.
이 부분을 혹시 펄을 잘 아시는 분께서 바꾸어 주시면 감사하겠습니다.

-- ## crz2sql.pl--

자 아래는 저의 게시판에 맞게 되어 있습니다.
자신에게 맞는 필드를 따로 정의 하여서 바꾸어야 합니다.
#!/usr/bin/perl
$table = $ARGV[0] ;
$options = $ARGV[1] ;

if ( !$options ) { &printsql() ; }

#######################
sub printsql()
{
$vitual_no = 0 ;
for ( $infile = 1 ; $infile <= 5680 ;$infile++ ) {
open( infileH, $infile ) || next ;

while ( $aLine = ) {

$aLine =~ s/n//g ;
@arrtext = split(/=/,$aLine ) ;

@field = split(/./,$arrtext[0]);

if ($field[1] eq "Name") {
$name = $arrtext[1] ;
} elsif ($field[1] eq "Subject") {
$subject= $arrtext[1] ;
$subject=~ s/'/'/g ;
} elsif ($field[1] eq "Access") {
$hit = $arrtext[1] ;
} elsif ($field[1] eq "Email") {
$email = $arrtext[1] ;
} elsif ($field[1] eq "Thread") {
$reno = $arrtext[1] ;
} elsif ($field[1] eq "Filename") {
$file = $arrtext[1] ;
} elsif ($field[1] eq "Password") {
$password = $arrtext[1] ;
} elsif ($field[1] eq "IP") {
$ip = $arrtext[1] ;
} elsif ($field[1] eq "Text" ) {
$text = "" ;
if ( $#arrtext >= 2 ) {
for ( $i = 1 ; $i <= $#arrtext ; $i++ ) {
if ( $i == 1 ) { $equel = ""; } else { $equel
= "=" ;}
$text = $text . $equel . $arrtext[$i] ;
}
$text =~ s/rn/n/g ;
$text =~ s//\/g ;
$text =~ s/'/'/g ;
} else {
$text = $arrtext[1] ;
$text =~ s/rn/n/g ;
$text =~ s//\/g ;
$text =~ s/'/'/g ;
}
}
}

if ( $reno != 0 ) {
print "UPDATE $table SET re = '1' WHERE no = '$reno';n" ;
$vno = 0 ;

$redt = $redt_hasy{ "$reno" } + 1 ;
%redt_hasy = ( "$infile" , $redt ) ;
} else {
$vitual_no = $vitual_no + 1 ;
$vno = $vitual_no ;
$redt = 0 ;
}
print "INSERT INTO $table VALUES
('$infile','0','$reno','$redt','$hit','$vno','935000000','$ip','$name',
'','$email','','$subject','$text','$file');n";
}

close( infileH );
}

여기서 redt는 댓글의 레벨,, re는 부모 레벨에서의 댓글있는가의 여부
reno는 댓글일 경우 부모글의 번호 vno는 보여지는 번호
no는 절대 번호 입니다..
이부분은 자신에게 맞게끔.. 최적화 해야 겠죠.

사용 방법..
여기서 디렉토리는 ozbrd 즉 아까 생성한 디렉토리..
즉.. 수많은 번호로된 파일이 있는 디렉토리 입니다.
shell> ./crz2sql.pl DIR > DIR.sql


여기서 ozbrd 은 생성될 테이블 이름입니다.

자 이러면.. DIR.sql이 생성 됩니다.
이러면..
mysql -p DB < DIR.sql

코멘트  

이름 :      비밀번호 :
         자동등록방지
내용 :  
파일 :




금연

  글번호
이름
1 2
날짜
  175Linux 디도스 방어 조회수가 1000회 이상이네요. ^0^2014-11-08
  174Linux chkrootkit 을 이용한 루트킷 탐지법 조회수가 1000회 이상이네요. ^0^2014-11-08
  173Linux 리눅스 해킹사고 분석 및 대응절차 조회수가 1000회 이상이네요. ^0^2014-11-08
  111Linux 리눅스 관리자가 알아두어야 할 50가지 코멘트가 20개 이상이네요. ^0^ 조회수가 1000회 이상이네요. ^0^2018-02-09 18:20
MelnAbsed
  74Linux 리눅스 파일관련명령어 시스템명령어 조회수가 1000회 이상이네요. ^0^2007-11-12
  73Linux 리눅스 명령어 모음 조회수가 1000회 이상이네요. ^0^2015-02-23 18:18
Carey
  67Linux mount 조회수가 1000회 이상이네요. ^0^2002-02-20
  27Linux 웹호스팅용 서버 기본셋팅 조회수가 1000회 이상이네요. ^0^2017-09-15 16:25
KuraFexy
  26Linux 네스케이프 6 설치/실행 잘 안될때....... 조회수가 1000회 이상이네요. ^0^2001-01-18
  25Linux SSH에 대해서.... 조회수가 1000회 이상이네요. ^0^2017-12-03 14:06
Philipduh
  23Linux vi 에디터 사용법 조회수가 1000회 이상이네요. ^0^2000-11-02
  Linux 크레이지보드를 php,mysql 보드로의 변환 조회수가 1000회 이상이네요. ^0^2000-10-17
  21Linux Linux + oracle816 + apache + php4 + ... 조회수가 1000회 이상이네요. ^0^2000-10-09
  20Linux 리눅스 설정 조회수가 1000회 이상이네요. ^0^2000-10-05
  17Linux tarx 하나로 전부 풀 수 있게....... 조회수가 1000회 이상이네요. ^0^2000-10-05
 
1 2
글쓰기    목록   다음   로그인
Since 1998-2020 Chris. BSD LICENSE