채택완료
run_replace 에서 $board, $w 가 들어가는 이유가 있을까요..?
엑셀 + 파일첨부로 갤러리 게시판에 대량의 게시글을 등록하려고 하고 있습니다.
엑셀에서 데이터 들고와서 게시글 등록하는 부분은 문제가 없는데 업로드한 파일 순서대로 파일업로드도 동시에 진행중인데 run_replace 함수에 $board 와 $w 가 들어갑니다.
따로 파일을 만들어서 작동중인데 호출하면 $board, $w 가 빈값이라 에러가 있을까 해서 확인해보고자 합니다.
Copy
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
include_once('../common.php');
set_time_limit ( 0 );
ini_set('memory_limit', '50M');
$is_upload_file = (isset($_FILES['excelfile']['tmp_name']) && $_FILES['excelfile']['tmp_name']) ? 1 : 0;
if ( !$is_upload_file ) {
alert("엑셀 파일을 업로드해 주세요.");
}
$is_file_excel = ($_FILES['excelfile']['type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') ? 1 : 0;
if ( !$is_file_excel ) {
alert("xlsx 파일을 업로드해 주세요.");
}
$is_upload_images = (isset($_FILES['images']['tmp_name']) && $_FILES['images']['tmp_name']) ? 1 : 0;
if ( $is_upload_file && $is_file_excel ) {
$write_table = $g5['write_prefix'] . 'digital_archive';
$file = $_FILES['excelfile']['tmp_name'];
require_once "./Classes/PHPExcel/IOFactory.php"; // IOFactory.php을 불러옴.
$objPHPExcel = PHPExcel_IOFactory::load($file);
$sheet = $objPHPExcel->getSheet(0);
$num_rows = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$total_count = 0;
$fail_count = 0;
$succ_count = 0;
$file_count = 0;
$file_fail_count = 0;
for ($i = 2; $i <= $num_rows; $i++) {
$total_count++;
$rowData = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i,
NULL,
TRUE,
FALSE);
$wr_num = get_next_num($write_table);
$wr_reply = '';
$wr_comment = 0;
$ca_name = addslashes($rowData[0][0]);
$wr_option = (addslashes($rowData[0][5]) == 'Y') ? 'secret' : '';
$wr_subject = '파일명으로?!';
$wr_content = '내용은 ?!';
$wr_seo_title = '서브타이틀?!';
$wr_link1 = '';
$wr_link2 = '';
$wr_link1_hit = 0;
$wr_link2_hit = 0;
$wr_hit = 0;
$wr_good = 0;
$wr_nogood = 0;
$mb_id = 'admin';
$wr_password = '';
$wr_name = '양평원';
$wr_email = '[email protected]';
$wr_homepage = '';
$wr_datetime = G5_TIME_YMDHIS;
$wr_last = G5_TIME_YMDHIS;
$wr_ip = $_SERVER['REMOTE_ADDR'];
$wr_1 = addslashes($rowData[0][1]);
$wr_2 = addslashes($rowData[0][2]);
$wr_3 = addslashes($rowData[0][3]);
$wr_4 = addslashes($rowData[0][4]);
$wr_5 = '';
$wr_6 = '';
$wr_7 = '';
$wr_8 = '';
$wr_9 = '';
$wr_10 = '';
$wr_tags1 = addslashes($rowData[0][6]);
$wr_tags2 = addslashes($rowData[0][7]);
if(!$wr_num || !$ca_name || !$wr_1 || !$wr_2 || !$wr_3 || !$wr_4) {
$fail_count++;
continue;
}
$sql = " insert into $write_table
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = '$wr_comment',
ca_name = '$ca_name',
wr_option = '$wr_option',
wr_subject = '$wr_subject',
wr_content = '$wr_content',
wr_seo_title = '$wr_seo_title',
wr_link1 = '$wr_link1',
wr_link2 = '$wr_link2',
wr_link1_hit = '$wr_link1_hit',
wr_link2_hit = '$wr_link2_hit',
wr_hit = '$wr_hit',
wr_good = '$wr_good',
wr_nogood = '$wr_nogood',
mb_id = '$mb_id',
wr_password = '$wr_password',
wr_name = '$wr_name',
wr_email = '$wr_email',
wr_homepage = '$wr_homepage',
wr_datetime = '$wr_datetime',
wr_last = '$wr_last',
wr_ip = '$wr_ip',
wr_1 = '$wr_1',
wr_2 = '$wr_2',
wr_3 = '$wr_3',
wr_4 = '$wr_4',
wr_5 = '$wr_5',
wr_6 = '$wr_6',
wr_7 = '$wr_7',
wr_8 = '$wr_8',
wr_9 = '$wr_9',
wr_10 = '$wr_10',
wr_tags1 = '$wr_tags1',
wr_tags2 = '$wr_tags2' ";
/* sql_query($sql);
$wr_id = sql_insert_id();
// 부모 아이디에 UPDATE
sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
// 새글 INSERT
sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( 'digital_archive', '{$wr_id}', '{$wr_id}', '${wr_datetime}', '{$mb_id}' ) ");
// 게시글 1 증가
sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = 'digital_archive'"); */
if ( $is_upload_images ) {
if ( $_FILES['images']['tmp_name'][$succ_count] && is_uploaded_file($_FILES['images']['tmp_name'][$succ_count])) {
$chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));
$file_upload_msg = '';
$upload = array();
$upload[0]['file'] = '';
$upload[0]['source'] = '';
$upload[0]['filesize'] = 0;
$upload[0]['image'] = array();
$upload[0]['image'][0] = 0;
$upload[0]['image'][1] = 0;
$upload[0]['image'][2] = 0;
$upload[0]['fileurl'] = '';
$upload[0]['thumburl'] = '';
$upload[0]['storage'] = '';
$tmp_file = $_FILES['images']['tmp_name'][$succ_count];
$filesize = $_FILES['images']['size'][$succ_count];
$filename = $_FILES['images']['name'][$succ_count];
$filename = get_safe_filename($filename);
if (is_uploaded_file($tmp_file)) {
//=================================================================\
// 090714
// 이미지나 플래시 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
$timg = @getimagesize($tmp_file);
// image type
if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename) ||
preg_match("/\.({$config['cf_flash_extension']})$/i", $filename) ) {
if ($timg['2'] < 1 || $timg['2'] > 18)
continue;
}
//=================================================================
$upload[0]['image'] = $timg;
// 프로그램 원래 파일명
$upload[0]['source'] = $filename;
$upload[0]['filesize'] = $filesize;
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc|phar)/i", "$0-x", $filename);
shuffle($chars_array);
$shuffle = implode('', $chars_array);
$upload[0]['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);
$dest_file = G5_DATA_PATH.'/file/digital_archive/test/'.$upload[0]['file'];
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['images']['error'][$succ_count]);
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, G5_FILE_PERMISSION);
$dest_file = run_replace('write_update_upload_file', $dest_file, $board, $wr_id, $w);
$upload[0] = run_replace('write_update_upload_array', $upload[0], $dest_file, $board, $wr_id, $w);
echo $dest_file.'<br/>';
/* $upload[0]['source'] = sql_real_escape_string($upload[0]['source']);
$bf_width = isset($upload[0]['image'][0]) ? (int) $upload[0]['image'][0] : 0;
$bf_height = isset($upload[0]['image'][1]) ? (int) $upload[0]['image'][1] : 0;
$bf_type = isset($upload[0]['image'][2]) ? (int) $upload[0]['image'][2] : 0;
$row = sql_fetch(" select count(*) as cnt from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$wr_id}' and bf_no = '{$i}' "); */
}
}
}
$succ_count++;
}
}
?>
지금은 해당 상태이며 한 게시글에 한개의 이미지만 첨부가능해서 게시글 등록 후 이미지 1개 업로드 후 wr_id 일치시키고 테이블 일치시키고 있습니다.
감사합니다.
|
답변 1개 / 댓글 2개
채택된 답변
+20 포인트
파일 업로드시 기본적으로 $board와 $w값에 따라 동작하는 코드가 다릅니다.
그렇기 떄문에 후킹할 때도 해당 변수를 필수로 넣게 되어있는것 같네요
답변을 작성하려면 로그인이 필요합니다.
게시판 목록에서는 이미지를 보여주고 있으나 view 페이지나 최신글 썸네일 부분에서 이미지가 없다고 나옵니다..
등록은 잘 처리되었는데 썸네일 부분에서 에러가 있네요.
감사합니다.