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