<?php // (2020.1.23, 차재복, Cha Jae Bok, cjbword@gmailcom)
// 접속 통계용 jQuery
/*
echo "<script type='text/javascript'>
$( function() {
$(document).on('click', '.onedrive',
function() {
window.location.href ='./".basename($_SERVER['SCRIPT_FILENAME'])."?parm=onedrive' ;
});
});
</script>";
*/
// 접속 통계
function html_access ($script_filename, $dbi, $no='', $sh='') {
// 해킹방지
if (strlen($script_filename)>30) exit;
$script_filename = mysqli_real_escape_string($dbi,$script_filename);
// 전역 변수
$remote_addr = $_SERVER['REMOTE_ADDR'];
// user_agent
$u_a = $_SERVER['HTTP_USER_AGENT'];
// 이전 referer 사이트
$m_referer= substr($_SERVER['HTTP_REFERER'],0,254);
$m_referer= mysqli_real_escape_string($dbi,trim($m_referer));
// query_string
$m_query_str = substr($_SERVER['QUERY_STRING'],0,255);
// local or editor 이면, return
if ($remote_addr == '192.168.0.1' or isset($_COOKIE['login_name'])) return;
// robot 이면, return
if ( ! is_not_robot() ) return;
// 기존 통계 테이블에서, 용어해설 페이지 열어보면 통계 처리
if ( ! empty($no) and $script_filename == 'view.php' ) {
mysqli_query($dbi,"insert into dict.ip_count (ip,last_login,access_cnt,day_access_cnt,first_login) values ('{$remote_addr}',now(),1,1,now()) on duplicate key update last_login=now(),access_cnt=(access_cnt+1),day_access_cnt=if(dayofyear(now())=dayofyear(last_login),day_access_cnt+1,1) ");
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
mysqli_query($dbi,"insert into dict.dict_count (no,ip,search_date,no_match,robot,u_a,referer,query_str) values ('$no','{$remote_addr}',now(),'$sh','$robot','{$u_a}','{$m_referer}','{$m_query_str}')");
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
}
// 용어해설 페이지 열어보지 않았으면, return
$result = mysqli_query($dbi,"select * from dict.ip_count where ip='{$remote_addr}' ");
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
if( mysqli_num_rows($result) == 0 ) return;
// and $script_filename!='view_src'
// 통계 테이블에서 동일 날짜,ip,스크립트명인지 확인을 위한 검색 쿼리 수행
$result_chk = mysqli_query($dbi,"select * from dict.stat_page where page_name='$script_filename' and stat_date=date_format(now(),'%Y-%m-%d') and last_ip='{$remote_addr}' "); //
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
$row_chk = mysqli_fetch_assoc($result_chk);
$temp_no = ( empty($no) ? 0 : $no );
// 처음
if ( mysqli_num_rows($result_chk) == 0 ) {
// 신규 통계 테이블
mysqli_query($dbi,
"insert into dict.stat_page
(page_name, stat_date, last_ip, last_access, access_num, user_agent, no)
values
('$script_filename', now(), '{$remote_addr}', now(), 1, '{$u_a}', $temp_no )");
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
}
// 2회 이상
if ( mysqli_num_rows($result_chk) > 0 ) {
// 신규 통계 테이블
$query = "update dict.stat_page set access_num=access_num+1, last_access=now(), no=$temp_no where page_name='$script_filename' and stat_date = '".date("Y-m-d")."' and last_ip='{$remote_addr}' ";
mysqli_query($dbi,$query);
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
}
}
// robot 여부를 확인 *********************************************************
function is_not_robot() {
// 이전 referer 사이트 empty 이면,
if(empty($_SERVER['HTTP_REFERER'])) return false;
// Google 로봇
$r_ip = $_SERVER['REMOTE_ADDR'];
if ( ip2long($r_ip) >= ip2long('66.249.64.0') and ip2long($r_ip) <= ip2long('66.249.95.255') ) return false; // 2018.6.11 ~
// kt 로봇
if ( ip2long($r_ip) >= ip2long('222.122.190.0') and ip2long($r_ip) <= ip2long('222.122.190.255') ) return false; // 2019.10.16 ~
// 미확인 로봇 //
// ① (referer 15 바이트 미만 및 *.xyz 이면) 2019.12.14 ~
if( strpos($_SERVER['HTTP_REFERER'],'.xyz/')!==false ) return false;
// ② (referer 17 바이트 미만 및 *.best 이면) 2020.1.23~
if( strpos($_SERVER['HTTP_REFERER'],'.best/')!==false ) return false;
$robot_arr = array('Googlebot','Bot','cowbot','empas','Yahoo! Slurp','WISEbot','BizBot04','CaliforniaBrownSpider','msnbot','1Noonbot','bingbot','Daumoa','Yeti/','MJ12bot','Google Web Preview','HTTrack','crawler','http_load 29jun2005','TurnitinBot','FunWebProducts','SiteBot/','QrobotW','ezooms.bot@','Microsoft URL Control','KISA','discobot','robot','pirst','spider/','lycosa.','checkprivacy','Crawler','Preview','bsalsa.com','nutch agent','NAVER','360Spider','.org_bot','WebCapture ','instapaper','Ezooms',' DigExt','siteexplorer','Nutch','flipboard','wotbox','Navigator','linkAnalyze','Korea Internet & Security Agency','_bot','cs.daum.net','Facebot','Cliqzbot','Scrapy');
foreach($robot_arr as $key => $value) {
// robot 이면,
if(strpos($_SERVER['HTTP_USER_AGENT'], $value)!==false) {
return false; // this is robot !!!
}
}
return true;
}
?>