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

4년 전 조회 1,902

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

 

엑셀에서 데이터 들고와서 게시글 등록하는 부분은 문제가 없는데 업로드한 파일 순서대로 파일업로드도 동시에 진행중인데 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 = 'admin@domain.com';

        $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개

채택된 답변
+20 포인트

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

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

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

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

감사합니다.
성공은 했습니다.

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

감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고