<?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);
?>