이미지 등 대량등록 게시판(그누4에서 그누5 변환)

이미지 등 대량등록 게시판(그누4에서 그누5 변환)

QA

이미지 등 대량등록 게시판(그누4에서 그누5 변환)

본문

 

1,000개 넘는 문서와 이미지 파일을 서버에 저장하고,  아래 php를 실행하면 자동으로 게시글이 생성되고 첨부파일도 같이 붙어오는 기능을 만들고 싶어서 며칠째 씨름하고 있습니다. (그누 초보입니다)

 

2013년에 이코아리 님께서 공개하신 그누4 소스를 그누5로 나름 변환도 하고(어설프지만) 

경로 문제가 있을까 싶어 하드코딩도 해가면서 여러가지 시도를 한 결과, 

파일 복사까지는 성공했는데, DB (g5_board_file, g5_write_aa)에는 저장이 되지 않습니다. 

 

약간의 조언만 해 주셔도 큰 힘이 될 것 같습니다.  감사합니다. 

 

starting parse files in dir : C:/G5/data/file/xxx... 

.

..

image.jpg

[result] : false --moving file C:/G5/data/file/xxx/image.jpg > C:/G5/data/file/aa/nice_453901_961050.jpg

end parse files in dir : C:G5/data/file/xxx/image.jpg

 


<?php 
###/lib/parse.php    파일로 함. 
include_once('./_common.php');
set_time_limit(0); 
header("Content-type:text/html;charset=utf-8"); 
//include_once G5_PATH.'/lib/parse.lib.php'; 
//입력할 테이블 
$bo_table = 'aa'; 
//데이터를 파싱할 디렉토리 
$dir= G5_PATH.'/data/file/xxx'; 

//zip 에서 압축을 푼것인지.. 압축 푼것은 이상하게 작동함. 
$is_zip = false; 

@chmod("$g5[path]/data/file/$bo_table", 0707); 
echo 'starting parse files in dir : '.$dir.'....<br>'; 
parse_dir($bo_table, $dir, $g5, ''); 
echo 'ended parse files in dir  : .'.$dir.'...<br>'; 
function parse_dir($bo_table, $dir, $g5, $dir_name='') 
{ 
global $is_zip; 
$df = opendir($dir); 
if($df){ 
while(( $file =readdir($df)) == true){ 
$file = trim($file); 
echo $file.'<br>'; 
if($file == false || $file=='.' || $file == '..') 
continue; 
if(preg_match('/[.]db/i', $file)) continue; 
//파일일 경우 
if(is_file($dir.'/'.$file) && @getimagesize($dir.'/'.$file) == true) 
{ 
$tmp_name = urldecode($file); 
if(iconv('euc-kr', 'utf-8', $tmp_name) != $tmp_name ) 
$filename = iconv('euc-kr', 'utf-8', $tmp_name); 
else 
$filename = $file; 
$filename = $file; 
$tmp_file = $dir.'/'.$file; 
$write_table = $g5['write_prefix'].$bo_table; // 게시판 테이블 전체이름 
$filename = $dir_name ? $dir_name.' > '.$filename : $filename; 
//$filename = preg_replace('/\/Set\s\d?\//i', '', $filename); 
$timg = @getimagesize($tmp_file); 
$upload[0]['image'] = $timg; 
$upload[0]['source'] = mysql_real_escape_string($filename); 
$upload[0]['filesize'] =filesize($tmp_file); 
$upload[0]['file'] = get_unique_file($filename); 
$upload[0]['content'] = mysql_real_escape_string($filename); 
$upload[0]['subject'] = mysql_real_escape_string($filename); 

$dest_file = G5_PATH.'/data/file/'.$bo_table.'/' . $upload[0]['file']; 
copy($tmp_file, $dest_file); 
chmod($dest_file, 0606); 

$wr_id = insert_data($bo_table, $write_table, $upload, $g5); 
if($wr_id) 
insert_file($bo_table, $wr_id, $g5, $upload); 

$result = $wr_id ? 'true' : 'false'; 
echo '[result] : '.$result.' -- moving file '.$tmp_file.' > '.$dest_file.'<br>' ; 
}else if(is_dir($dir.'/'.$file)) 
{ 
if(iconv('euc-kr', 'utf-8', $file) != $file ) 
$filename = iconv('euc-kr', 'utf-8', $file); 
else 
$filename = $file; 
$filename = $dir_name.' > '.$filename; 

//디렉토리를 만들어 간다. 
parse_dir($bo_table, $dir.'/'.$file, $g5, $filename); 
} 
} 
closedir($df); 
}else{ 
echo 'failed open dir : '.$dir.'<br>'; 
} 
} 

//mysql_close(); 

function insert_file($bo_table, $wr_id, $g5, $upload){ 
  
  for($i = 0, $j = count($upload);$i<$j;$i++) { 
$sql = " insert into $g5[board_file_table] 
set bo_table = '$bo_table', 
wr_id = '$wr_id', 
bf_no = '$i', 
bf_source = '{$upload[$i][source]}', 
bf_file = '{$upload[$i][file]}', 
bf_content = '{$upload[$i][content]}', 
bf_download = 0, 
bf_filesize = '{$upload[$i][filesize]}', 
bf_width = '{$upload[$i][image][0]}', 
bf_height = '{$upload[$i][image][1]}', 
bf_type = '{$upload[$i][image][2]}', 
bf_datetime = '$g5[time_ymdhis]' "; 
sql_query($sql); 
} 
} 
//데이터를 입력하는 부분 
function insert_data($bo_table, $write_table,$upload, $g5,$wr_subject='', $wr_link1 = ''){
$wr_num = get_next_num($write_table); 
$member =array( 
'mb_id'=>'', 
); 
//$mb_id = $member['mb_id'];
$wr_name=''; 
$wr_subject = $wr_subject ? $wr_subject : $upload[0]['subject']; 
$wr_content = $wr_subject; 
$wr_password= sql_password('aaaa'); 
$wr_email = '*** 개인정보보호를 위한 이메일주소 노출방지 ***'; 

$sql = " insert into $write_table 
set wr_num = '$wr_num', 
wr_reply = '0', 
wr_comment = 0, 
ca_name = '', 
wr_option = '', 
wr_subject = '$wr_subject', 
wr_content = '$wr_content', 
wr_link1 = '$wr_link1', 
wr_link2 = '$wr_link2', 
wr_link1_hit = 0, 
wr_link2_hit = 0, 
wr_trackback = '$wr_trackback', 
wr_hit = 0, 
wr_good = 0, 
wr_nogood = 0, 
mb_id = 'admin', 
wr_password = 'admin', 
wr_name = '$wr_name', 
wr_email = '$wr_email', 
wr_homepage = '', 
wr_datetime = '".G5_TIME_YMDHIS."', 
wr_last = '".G5_TIME_YMDHIS."',
wr_ip = '$_SERVER[REMOTE_ADDR]', 
wr_1 = '', 
wr_2 = '', 
wr_3 = '', 
wr_4 = '', 
wr_5 = '', 
wr_6 = '', 
wr_7 = '', 
wr_8 = '', 
wr_9 = '', 
wr_10 = '' "; 

//sql_query($sql, false); 
sql_query($sql);
//$wr_id = mysql_insert_id(); 
$wr_id = sql_insert_id();
if($wr_id) { 
// 부모 아이디에 UPDATE 
sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' "); 
// 새글 INSERT 
sql_query(" insert into g5_write_aaaa ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', 'admin')  ");
// 게시글 1 증가 
sql_query("update $write_table  set bo_count_write = bo_count_write + 1 where bo_table = '$bo_table'");
} 
return $wr_id; 
} 
//파일의 확장자를 구하는 함수 
function get_extension($file){    
return strtolower(substr(strrchr($file,"."),1)); 
} 
function get_unique_file($file) 
{ 
$ext = get_extension($file); 
return 'nice_'.substr(microtime(),4,6).'_'.mt_rand(99999,999999).'.'.$ext; 
} 
//파일을 다운로드 하여, array() 형태로 파일을 리턴 
//snoopy 클래스를 이용하여 파일을 다운로드 한다. 
function download($ori_file, $bo_table, $img,$snoopy ) 
{ 
global $g5; 
$data_dir = G5_PATH.'/data/file/'.$bo_table.'/'; 
$parsedUrl = parse_url($ori_file); 
//$snoopy ->referer = $parsedUrl['scheme'].$parsedUrl['host']; 

if($snoopy->fetch($ori_file)) { 
$content =  $snoopy->results; 
} else { 
echo $snoopy->error; 
return array(); 
} 
echo $content; 
exit; 
$filename= get_unique_file($img); 
$dest_file = $data_dir.$filename; 
$newFile = @fopen($dest_file,"wb"); 
@fwrite($newFile,$content); 
@fclose($newFile); 

$upload = array(); 
$timg = @getimagesize($dest_file); 
$upload['image'] = $timg; 
$upload['source'] = mysql_real_escape_string($img); 
$upload['filesize'] =filesize($dest_file); 
$upload['file'] = $filename; 
$upload['content'] = mysql_real_escape_string($img); 
$upload['subject'] = mysql_real_escape_string($img); 
return $upload; 
} 

//디비 입력이 실패했을 경우에, 다운 받은 파일을 삭제하는 로직 
function delete_file($bo_table, $wr_id, $g5, $img_arr) 
{ 
if($img_arr == false) 
return; 

$data_dir = G5_PATH.'/data/file/'.$bo_table.'/'; 
foreach($img_arr as $val) 
{ 
if(is_file($data_dir.$val)) 
unlink($data_dir.$val); 
} 
} 
?>

이 질문에 댓글 쓰기 :

답변 1

sql query이니 매뉴얼로 step by step으로 해서 한개가 동작하는지 체크해 보는 것이 좋을 것 같습니다.

$g5[board_file_table]

$write_table

g5_write_aaaa

 

이렇게 3곳에 쓰는 것 같은데..

답변을 작성하시기 전에 로그인 해주세요.
전체 408
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT