이미지 등 대량등록 게시판(그누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곳에 쓰는 것 같은데..
답변을 작성하시기 전에 로그인 해주세요.