001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127
<?php // (2019.1.8, 차재복, Cha Jae Bok, cjbword@gmailcom) # 세션 스타트 (매 웹페이지 마다 필요) session_start(); # db 접속 include_once "../base_utils/db_conn.php"; # 전달 변수 : act (dir/file), seq (id), str (파일명-name), extra (디렉토리명-extra:dir) $act = $_REQUEST['act']; $act = substr($act,0,10); // 해킹 방지 (글자 수 제한) $seq = $_REQUEST['seq']; if ( isset($_REQUEST[seq]) and !empty($seq) and !is_numeric($seq) or $seq<0 ) exit; // 해킹방지 (수치>0) $seq = substr($seq,0,10); // 해킹 방지 (글자 수 제한) $name = $_REQUEST['str']; $name = mb_substr($name,0,40,'utf-8'); // 해킹 방지 (글자 수 제한) $name = mysqli_real_escape_string($dbi,$name); // 해킹 방지 (SQL Injection 대비 escape 처리) $extra = $_REQUEST['extra']; $extra = mb_substr($extra,0,60,'utf-8'); // 해킹 방지 (글자 수 제한) $extra = mysqli_real_escape_string($dbi,$extra); // 해킹 방지 (SQL Injection 대비 escape 처리) # http 헤더 (json 포멧) header('content-type: application/json; charset=utf-8'); # 초기 $echo_html = ''; # 쿼리문 switch ($act) { case 'dir' : // 디렉토리 확인 $dir_name = $name ; $startdir = realpath('../') . '\\' . $dir_name ; // php scandir 함수에 의한 디렉토리명,파일명 탐색하기 foreach( array_diff(scandir($startdir), array('..', '.','backup')) as $idx => $names) { // 디렉토리이면, if ( is_dir($startdir.'/'.$names) ) { $echo_html .= "["."<a href='' class='add' data-id='{$seq}' data-act='dir' data-name='{$names}' >{$names}</a>"."]"; // 파일이면, } else { // 불요 파일 걸러내기 if ( strpos($names,'.bak')===false ) { $echo_html .= "<a href='' class='add' data-id='{$seq}' data-act='file' data-name='{$names}'>{$names}</a>"; } } $echo_html .= " "; } break; case 'file' : $dir = substr($extra,1); // 디렉토리명 앞에 '/'을 제거 $id = $seq; // 소스파일에서 해당 dir,filename 있는지 여부 $query = "select fno from src_files where dir = '{$dir}' and filename = '{$name}'"; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} // 소스파일(src_files) 추가 if (mysqli_num_rows($result) == 0) { // $query = "insert into src_files (fno,dir,filename) values ('{$dir}','{$name}')"; $query = "insert into src_files (fno,dir,filename) select (a.fno + 1) as fno,'{$dir}' as dir,'{$name}' as filename from src_files a left join src_files b ON b.fno = (a.fno + 1) where b.fno is null order by a.fno limit 0,1 "; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} } // 해당 파일번호 fno // 소스파일에서 해당 dir,filename 있는지 여부 $query = "select fno from src_files where dir = '{$dir}' and filename = '{$name}'"; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $matched = mysqli_fetch_assoc($result); $fno = $matched[fno]; // 맵(run_map) 존재 여부를 확인하고, 추가 $query = "select * from run_map where id=$id and fno=$fno"; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} // $echo_html .= 'id='.$id.', fno='.$fno; if (mysqli_num_rows($result) == 0) { $query = "insert into run_map (id,fno) values ($id,$fno)"; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} } break; case 'update' : $query = "update src_files set expr = '{$extra}' where fno = {$seq} "; $result = mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { $echo_html .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} else $echo_html .= "update success"; break; default : $echo_html .= "조건실패"; } # 배열 생성 $response['html'] = $echo_html; $response['dir'] = $dir_name; $response['final'] = false; # json 포멧으로 송출 echo json_encode($response, JSON_UNESCAPED_UNICODE); ?>