<?php // (2020.7.31, 차재복, Cha Jae Bok, http://www.ktword.co.kr)
// [function] keyword_find_update(), keyword_add(), word_no_add()
// 해당 키워드에 대해 소스 파일들을 훓어서 찾고, 파일 번호를 기록
function keyword_find_update($keyword, $lang, $dbi) {
if ($_SESSION[user_type] != '종합관리자') return; // 해킹방어
$query = "select fno,dir,filename,expr,code from src_files where code is not null";
$result=mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
$i = 1;
$file_no_list = '';
while ( $matched = mysqli_fetch_assoc($result) ) {
$is_find = false;
$fileExt = substr(strrchr($matched[filename],'.'),1);
if ( strtolower($fileExt)==strtolower($lang) ) {
if ($lang == 'JS') {
if(preg_match("/[\s\.=(]{$keyword}/",$matched[code])) $is_find = true;
// \s (공백문자:공백,탭,줄바꿈), \. (마침표,객체 내 프로퍼티 접근), = (등호), ( (좌괄호)
} else if ($lang == 'PHP') {
$modi_keyword = str_replace('$','\$',$keyword); // $ => \$ (escape
if(preg_match("/[\s=(!\.]{$modi_keyword}[^a-z^A-Z^_]/",$matched[code])) $is_find = true;
// 앞 포함 : \s (공백문자:공백,탭,줄바꿈), = (등호), ( (좌괄호), ! (not), \. (마침표,문자열 연결)
// 뒤 제외 : ^A-Z ^a-z (영문자), ^_ (대시)
}
if ($is_find) {
$file_no_list = ( $i==1 ? $matched[fno] : $file_no_list.','.$matched[fno] );
// (디버깅용)
//echo $matched[filename]." ";
$i += 1;
}
}
}
if (!empty($file_no_list)) {
echo ($i-1)."개 소스 파일 찾고, 업데이트 함 !!! <br>";
$query = "update lang_keyword set file_no_list='{$file_no_list}' where keyword='{$keyword}' and lang='{$lang}'";
$result=mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
} else {
echo "해당 키워드 찾기 실패 !!!";
}
}
function keyword_add ($find, $cur_lang, $dbi) {
// 해킹방어
if ($_SESSION[user_type] != '종합관리자') $msg = '편집권한 없음'; // 해킹방어
if (empty($find)) $msg .= '키워드 제시 없음';
$find = trim(mysqli_real_escape_string($dbi, $find));
$cur_lang = trim(mysqli_real_escape_string($dbi, $cur_lang));
$query = "insert into lang_keyword (keyword,lang) values ('{$find}','{$cur_lang}')";
$result=mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) { $msg .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; }
if (mysqli_affected_rows($dbi) <= 0) {
$msg .= "레코드 삽입 실패 !!!";
}
return array('msg'=>$msg);
}
function word_no_add ($word_no, $find, $cur_lang, $dbi) {
if ($_SESSION[user_type] != '종합관리자') $msg = '편집권한 없음'; // 해킹방어
if (empty($word_no)) $msg .= '용어해설번호 없음';
$word_no = mysqli_real_escape_string($dbi, $word_no);
$cur_lang = mysqli_real_escape_string($dbi, $cur_lang);
$query = "update lang_keyword set word_no=if(word_no is null,'$word_no',concat(word_no,',$word_no')) where lang='{$cur_lang}' and keyword='$find'";
$result=mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) { $msg .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; }
return array('msg'=>$msg);
}
?>