run_replace 에서 $board, $w 가 들어가는 이유가 있을까요..?

run_replace 에서 $board, $w 가 들어가는 이유가 있을까요..?

QA

run_replace 에서 $board, $w 가 들어가는 이유가 있을까요..?

본문

엑셀 + 파일첨부로 갤러리 게시판에 대량의 게시글을 등록하려고 하고 있습니다.

 

엑셀에서 데이터 들고와서 게시글 등록하는 부분은 문제가 없는데 업로드한 파일 순서대로 파일업로드도 동시에 진행중인데 run_replace 함수에 $board 와 $w 가 들어갑니다.

 

따로 파일을 만들어서 작동중인데 호출하면 $board, $w 가 빈값이라 에러가 있을까 해서 확인해보고자 합니다.

 


<?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 = '*** 개인정보보호를 위한 이메일주소 노출방지 ***';
        $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

파일 업로드시 기본적으로 $board와 $w값에 따라 동작하는 코드가 다릅니다.
그렇기 떄문에 후킹할 때도 해당 변수를 필수로 넣게 되어있는것 같네요

엑셀 업로드는 무조건 대량 등록이라 등록만 처리하고 있는데 파일 업로드와 DB 에 데이터가 들어가긴 하나 파일을 못불러오고 있네요.

게시판 목록에서는 이미지를 보여주고 있으나 view 페이지나 최신글 썸네일 부분에서 이미지가 없다고 나옵니다..

등록은 잘 처리되었는데 썸네일 부분에서 에러가 있네요.

감사합니다.

성공은 했습니다.

wr_file 이 0 일 경우에는 파일 업로드가 안된걸로 인식하여 파일 순서대로 파일이 있으면 1 없으면 0 으로 처리하여 업로드 처리했습니다.

감사합니다.

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

회원로그인

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