테스트 사이트 - 개발 중인 베타 버전입니다

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

집에가고싶어 4년 전 조회 1,845

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

 

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

 

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

 

</p>

<p><?php</p>

<p> </p>

<p>error_reporting(E_ALL);</p>

<p>ini_set('display_errors', '1');</p>

<p> </p>

<p>include_once('../common.php');</p>

<p> </p>

<p>set_time_limit ( 0 );</p>

<p>ini_set('memory_limit', '50M');</p>

<p> </p>

<p>$is_upload_file = (isset($_FILES['excelfile']['tmp_name']) && $_FILES['excelfile']['tmp_name']) ? 1 : 0;</p>

<p> </p>

<p>if ( !$is_upload_file ) {</p>

<p>    alert("엑셀 파일을 업로드해 주세요.");</p>

<p>}</p>

<p> </p>

<p>$is_file_excel = ($_FILES['excelfile']['type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') ? 1 : 0;</p>

<p> </p>

<p>if ( !$is_file_excel ) {</p>

<p>    alert("xlsx 파일을 업로드해 주세요.");</p>

<p>}</p>

<p> </p>

<p>$is_upload_images = (isset($_FILES['images']['tmp_name']) && $_FILES['images']['tmp_name']) ? 1 : 0;</p>

<p> </p>

<p>if ( $is_upload_file && $is_file_excel ) {</p>

<p>    $write_table = $g5['write_prefix'] . 'digital_archive';</p>

<p>    $file = $_FILES['excelfile']['tmp_name'];</p>

<p> </p>

<p>    require_once "./Classes/PHPExcel/IOFactory.php"; // IOFactory.php을 불러옴.</p>

<p> </p>

<p>    $objPHPExcel = PHPExcel_IOFactory::load($file);</p>

<p>    $sheet = $objPHPExcel->getSheet(0);</p>

<p> </p>

<p>    $num_rows = $sheet->getHighestRow();</p>

<p>    $highestColumn = $sheet->getHighestColumn();</p>

<p> </p>

<p>    $total_count = 0;</p>

<p>    $fail_count = 0;</p>

<p>    $succ_count = 0;</p>

<p>    $file_count = 0;</p>

<p>    $file_fail_count = 0;</p>

<p> </p>

<p>    for ($i = 2; $i <= $num_rows; $i++) {</p>

<p>        $total_count++;</p>

<p>        $rowData = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i,</p>

<p>                                            NULL,</p>

<p>                                            TRUE,</p>

<p>                                            FALSE);</p>

<p>       </p>

<p>        $wr_num = get_next_num($write_table);</p>

<p>        $wr_reply = '';</p>

<p>        $wr_comment = 0;</p>

<p>        $ca_name = addslashes($rowData[0][0]);</p>

<p>        $wr_option = (addslashes($rowData[0][5]) == 'Y') ? 'secret' : '';</p>

<p>        $wr_subject = '파일명으로?!';</p>

<p>        $wr_content = '내용은 ?!';</p>

<p>        $wr_seo_title = '서브타이틀?!';</p>

<p>        $wr_link1 = '';</p>

<p>        $wr_link2 = '';</p>

<p>        $wr_link1_hit = 0;</p>

<p>        $wr_link2_hit = 0;</p>

<p>        $wr_hit = 0;</p>

<p>        $wr_good = 0;</p>

<p>        $wr_nogood = 0;</p>

<p>        $mb_id = 'admin';</p>

<p>        $wr_password = '';</p>

<p>        $wr_name = '양평원';</p>

<p>        $wr_email = 'admin@domain.com';</p>

<p>        $wr_homepage = '';</p>

<p>        $wr_datetime = G5_TIME_YMDHIS;</p>

<p>        $wr_last = G5_TIME_YMDHIS;</p>

<p>        $wr_ip = $_SERVER['REMOTE_ADDR'];</p>

<p>        $wr_1 = addslashes($rowData[0][1]);</p>

<p>        $wr_2 = addslashes($rowData[0][2]);</p>

<p>        $wr_3 = addslashes($rowData[0][3]);</p>

<p>        $wr_4 = addslashes($rowData[0][4]);</p>

<p>        $wr_5 = '';</p>

<p>        $wr_6 = '';</p>

<p>        $wr_7 = '';</p>

<p>        $wr_8 = '';</p>

<p>        $wr_9 = '';</p>

<p>        $wr_10 = '';</p>

<p>        $wr_tags1 = addslashes($rowData[0][6]);</p>

<p>        $wr_tags2 = addslashes($rowData[0][7]);</p>

<p> </p>

<p>        if(!$wr_num || !$ca_name || !$wr_1 || !$wr_2 || !$wr_3 || !$wr_4) {</p>

<p>            $fail_count++;</p>

<p>            continue;</p>

<p>        }</p>

<p> </p>

<p>        $sql = " insert into $write_table</p>

<p>                set wr_num = '$wr_num',</p>

<p>                     wr_reply = '$wr_reply',</p>

<p>                     wr_comment = '$wr_comment',</p>

<p>                     ca_name = '$ca_name',</p>

<p>                     wr_option = '$wr_option',</p>

<p>                     wr_subject = '$wr_subject',</p>

<p>                     wr_content = '$wr_content',</p>

<p>                     wr_seo_title = '$wr_seo_title',</p>

<p>                     wr_link1 = '$wr_link1',</p>

<p>                     wr_link2 = '$wr_link2',</p>

<p>                     wr_link1_hit = '$wr_link1_hit',</p>

<p>                     wr_link2_hit = '$wr_link2_hit',</p>

<p>                     wr_hit = '$wr_hit',</p>

<p>                     wr_good = '$wr_good',</p>

<p>                     wr_nogood = '$wr_nogood',</p>

<p>                     mb_id = '$mb_id',</p>

<p>                     wr_password = '$wr_password',</p>

<p>                     wr_name = '$wr_name',</p>

<p>                     wr_email = '$wr_email',</p>

<p>                     wr_homepage = '$wr_homepage',</p>

<p>                     wr_datetime = '$wr_datetime',</p>

<p>                     wr_last = '$wr_last',</p>

<p>                     wr_ip = '$wr_ip',</p>

<p>                     wr_1 = '$wr_1',</p>

<p>                     wr_2 = '$wr_2',</p>

<p>                     wr_3 = '$wr_3',</p>

<p>                     wr_4 = '$wr_4',</p>

<p>                     wr_5 = '$wr_5',</p>

<p>                     wr_6 = '$wr_6',</p>

<p>                     wr_7 = '$wr_7',</p>

<p>                     wr_8 = '$wr_8',</p>

<p>                     wr_9 = '$wr_9',</p>

<p>                     wr_10 = '$wr_10',</p>

<p>                     wr_tags1 = '$wr_tags1',</p>

<p>                     wr_tags2 = '$wr_tags2' ";</p>

<p> </p>

<p>        /* sql_query($sql);</p>

<p>        $wr_id = sql_insert_id();</p>

<p> </p>

<p>        // 부모 아이디에 UPDATE</p>

<p>        sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");</p>

<p> </p>

<p>        // 새글 INSERT</p>

<p>        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}' ) ");</p>

<p> </p>

<p>        // 게시글 1 증가</p>

<p>        sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = 'digital_archive'"); */</p>

<p> </p>

<p>        if ( $is_upload_images ) {</p>

<p>            if ( $_FILES['images']['tmp_name'][$succ_count] && is_uploaded_file($_FILES['images']['tmp_name'][$succ_count])) {</p>

<p>                $chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));</p>

<p>                $file_upload_msg = '';</p>

<p>                $upload = array();</p>

<p> </p>

<p>                $upload[0]['file']     = '';</p>

<p>                $upload[0]['source']   = '';</p>

<p>                $upload[0]['filesize'] = 0;</p>

<p>                $upload[0]['image']    = array();</p>

<p>                $upload[0]['image'][0] = 0;</p>

<p>                $upload[0]['image'][1] = 0;</p>

<p>                $upload[0]['image'][2] = 0;</p>

<p>                $upload[0]['fileurl'] = '';</p>

<p>                $upload[0]['thumburl'] = '';</p>

<p>                $upload[0]['storage'] = '';</p>

<p> </p>

<p>                $tmp_file  = $_FILES['images']['tmp_name'][$succ_count];</p>

<p>                $filesize  = $_FILES['images']['size'][$succ_count];</p>

<p>                $filename  = $_FILES['images']['name'][$succ_count];</p>

<p>                $filename  = get_safe_filename($filename);</p>

<p>           </p>

<p>                if (is_uploaded_file($tmp_file)) {</p>

<p>                    //=================================================================\</p>

<p>                    // 090714</p>

<p>                    // 이미지나 플래시 파일에 악성코드를 심어 업로드 하는 경우를 방지</p>

<p>                    // 에러메세지는 출력하지 않는다.</p>

<p>                    //-----------------------------------------------------------------</p>

<p>                    $timg = @getimagesize($tmp_file);</p>

<p>                    // image type</p>

<p>                    if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename) ||</p>

<p>                        preg_match("/\.({$config['cf_flash_extension']})$/i", $filename) ) {</p>

<p>                        if ($timg['2'] < 1 || $timg['2'] > 18)</p>

<p>                            continue;</p>

<p>                    }</p>

<p>                    //=================================================================</p>

<p> </p>

<p>                    $upload[0]['image'] = $timg;</p>

<p> </p>

<p>                    // 프로그램 원래 파일명</p>

<p>                    $upload[0]['source'] = $filename;</p>

<p>                    $upload[0]['filesize'] = $filesize;</p>

<p> </p>

<p>                    // 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함</p>

<p>                    $filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc|phar)/i", "$0-x", $filename);</p>

<p> </p>

<p>                    shuffle($chars_array);</p>

<p>                    $shuffle = implode('', $chars_array);</p>

<p> </p>

<p>                    $upload[0]['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);</p>

<p> </p>

<p>                    $dest_file = G5_DATA_PATH.'/file/digital_archive/test/'.$upload[0]['file'];</p>

<p> </p>

<p>                    // 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.</p>

<p>                    $error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['images']['error'][$succ_count]);</p>

<p> </p>

<p>                    // 올라간 파일의 퍼미션을 변경합니다.</p>

<p>                    chmod($dest_file, G5_FILE_PERMISSION);</p>

<p> </p>

<p>                    $dest_file = run_replace('write_update_upload_file', $dest_file, $board, $wr_id, $w);</p>

<p>                    $upload[0] = run_replace('write_update_upload_array', $upload[0], $dest_file, $board, $wr_id, $w);</p>

<p> </p>

<p>                    echo $dest_file.'
';</p>

<p> </p>

<p>                    /* $upload[0]['source'] = sql_real_escape_string($upload[0]['source']);</p>

<p>                    $bf_width = isset($upload[0]['image'][0]) ? (int) $upload[0]['image'][0] : 0;</p>

<p>                    $bf_height = isset($upload[0]['image'][1]) ? (int) $upload[0]['image'][1] : 0;</p>

<p>                    $bf_type = isset($upload[0]['image'][2]) ? (int) $upload[0]['image'][2] : 0;</p>

<p> </p>

<p>                    $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}' "); */</p>

<p>                }</p>

<p>            }</p>

<p>        }</p>

<p> </p>

<p>        $succ_count++;        </p>

<p>    }</p>

<p>}</p>

<p>?></p>

<p>

 

지금은 해당 상태이며 한 게시글에 한개의 이미지만 첨부가능해서 게시글 등록 후 이미지 1개 업로드 후 wr_id 일치시키고 테이블 일치시키고 있습니다.

 

감사합니다.

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

답변 1개

채택된 답변
+20 포인트
4년 전

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

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

답변에 대한 댓글 2개

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

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

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

감사합니다.
집에가고싶어
4년 전
성공은 했습니다.

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

감사합니다.

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

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

로그인