From 80d72627b0e67d78ace75107bd00b70bb827cca2 Mon Sep 17 00:00:00 2001 From: chicpro Date: Thu, 12 Nov 2015 16:49:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Browscap=20=EA=B4=80=EB=A0=A8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/admin.menu100.php | 11 +++-- adm/browscap.php | 3 ++ adm/browscap_convert.php | 40 ++++++++++++++++++ adm/browscap_converter.php | 86 ++++++++++++++++++++++++++++++++++++++ adm/browscap_update.php | 3 ++ adm/visit.sub.php | 2 + adm/visit_device.php | 4 +- adm/visit_search.php | 2 - bbs/visit_insert.inc.php | 24 ++++++++--- config.php | 6 +++ lib/common.lib.php | 18 -------- lib/visit.lib.php | 47 +++++++++++++++++---- 12 files changed, 206 insertions(+), 40 deletions(-) create mode 100644 adm/browscap_convert.php create mode 100644 adm/browscap_converter.php diff --git a/adm/admin.menu100.php b/adm/admin.menu100.php index 6ac1e32ba..4670cb9ef 100644 --- a/adm/admin.menu100.php +++ b/adm/admin.menu100.php @@ -11,8 +11,13 @@ $menu['menu100'] = array ( array('100900', '캐시파일 일괄삭제',G5_ADMIN_URL.'/cache_file_delete.php', 'cf_cache', 1), array('100910', '캡챠파일 일괄삭제',G5_ADMIN_URL.'/captcha_file_delete.php', 'cf_captcha', 1), array('100920', '썸네일파일 일괄삭제',G5_ADMIN_URL.'/thumbnail_file_delete.php', 'cf_thumbnail', 1), - array('100500', 'phpinfo()', G5_ADMIN_URL.'/phpinfo.php', 'cf_phpinfo'), - array('100510', 'Browscap 업데이트', G5_ADMIN_URL.'/browscap.php', 'cf_browscap'), - array('100400', '부가서비스', G5_ADMIN_URL.'/service.php', 'cf_service') + array('100500', 'phpinfo()', G5_ADMIN_URL.'/phpinfo.php', 'cf_phpinfo') ); + +if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) { + $menu['menu100'][] = array('100510', 'Browscap 업데이트', G5_ADMIN_URL.'/browscap.php', 'cf_browscap'); + $menu['menu100'][] = array('100520', '접속로그 변환', G5_ADMIN_URL.'/browscap_convert.php', 'cf_visit_cnvrt'); +} + +$menu['menu100'][] = array('100400', '부가서비스', G5_ADMIN_URL.'/service.php', 'cf_service'); ?> \ No newline at end of file diff --git a/adm/browscap.php b/adm/browscap.php index 0a3323fcf..25f2f511d 100644 --- a/adm/browscap.php +++ b/adm/browscap.php @@ -2,6 +2,9 @@ $sub_menu = "100510"; include_once('./_common.php'); +if(!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) + alert('사용할 수 없는 기능입니다.', G5_ADMIN_URL); + if ($is_admin != 'super') alert('최고관리자만 접근 가능합니다.'); diff --git a/adm/browscap_convert.php b/adm/browscap_convert.php new file mode 100644 index 000000000..c01a92af8 --- /dev/null +++ b/adm/browscap_convert.php @@ -0,0 +1,40 @@ +=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) + alert('사용할 수 없는 기능입니다.', G5_ADMIN_URL); + +if ($is_admin != 'super') + alert('최고관리자만 접근 가능합니다.'); + +$g5['title'] = '접속로그 변환'; +include_once('./admin.head.php'); +?> + +
+

접속로그 Browscap 정보로 변환하시려면 아래 업데이트 버튼을 클릭해 주세요.

+ +
+ + + + \ No newline at end of file diff --git a/adm/browscap_converter.php b/adm/browscap_converter.php new file mode 100644 index 000000000..0b4983702 --- /dev/null +++ b/adm/browscap_converter.php @@ -0,0 +1,86 @@ +=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) + die('사용할 수 없는 기능입니다.'); + +if($is_admin != 'super') + die('최고관리자로 로그인 후 실행해 주세요.'); + +// 접속자 정보 필드 추가 +if(!sql_query(" select vi_browser from {$g5['visit_table']} limit 1 ")) { + sql_query(" ALTER TABLE `{$g5['visit_table']}` + ADD `vi_browser` varchar(255) NOT NULL DEFAULT '' AFTER `vi_agent`, + ADD `vi_os` varchar(255) NOT NULL DEFAULT '' AFTER `vi_browser`, + ADD `vi_device` varchar(255) NOT NULL DEFAULT '' AFTER `vi_os` ", true); +} + +// browscap cache 파일 체크 +if(!is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { + echo '

Browscap 정보가 없습니다. 아래 링크로 이동해 Browscap 정보를 업데이트 하세요.

'.PHP_EOL; + echo '

Browscap 업데이트

'.PHP_EOL; + exit; +} + +include_once(G5_PLUGIN_PATH.'/browscap/Browscap.php'); +$browscap = new phpbrowscap\Browscap(G5_DATA_PATH.'/cache'); +$browscap->doAutoUpdate = false; +$browscap->cacheFilename = 'browscap_cache.php'; + +// 데이터 변환 +$rows = preg_replace('#[^0-9]#', '', $_GET['rows']); +if(!$rows) + $rows = 100; + +$sql_common = " from {$g5['visit_table']} where vi_browser = '' or vi_os = '' or vi_device = '' "; +$sql_order = " order by vi_id desc "; +$sql_limit = " limit 0, $rows "; + +$sql = " select count(vi_id) as cnt $sql_common "; +$row = sql_fetch($sql); +$total_count = $row['cnt']; + +$sql = " select vi_id, vi_agent, vi_browser, vi_os, vi_device + $sql_common + $sql_order + $sql_limit "; +$result = sql_query($sql); + +$cnt = 0; +for($i=0; $row=sql_fetch_array($result); $i++) { + if(!$row['vi_agent']) + continue; + + $info = $browscap->getBrowser($row['vi_agent']); + + $brow = $row['vi_browser']; + if(!$brow) + $brow = $info->Comment; + + $os = $row['vi_os']; + if(!$os) + $os = $info->Platform; + + $device = $row['vi_device']; + if(!$device) + $device = $info->Device_Type; + + $sql2 = " update {$g5['visit_table']} + set vi_browser = '$brow', + vi_os = '$os', + vi_device = '$device' + where vi_id = '{$row['vi_id']}' "; + sql_query($sql2); + + $cnt++; +} + +if(($total_count - $cnt) == 0 || $total_count == 0) + echo '

변환완료

'; +else + echo '

총 '.number_format($total_count).'건 중 '.number_format($cnt).'건 변환완료

접속로그를 추가로 변환하시려면 아래 업데이트 버튼을 클릭해 주세요.

'; +?> \ No newline at end of file diff --git a/adm/browscap_update.php b/adm/browscap_update.php index 2b27c237f..e27a73974 100644 --- a/adm/browscap_update.php +++ b/adm/browscap_update.php @@ -7,6 +7,9 @@ include_once('./_common.php'); // clean the output buffer ob_end_clean(); +if(!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) + die('사용할 수 없는 기능입니다.'); + if ($is_admin != 'super') die('최고관리자만 접근 가능합니다.'); diff --git a/adm/visit.sub.php b/adm/visit.sub.php index a9b3d7468..4d1f97f42 100644 --- a/adm/visit.sub.php +++ b/adm/visit.sub.php @@ -29,7 +29,9 @@ $query_string = $qstr ? '?'.$qstr : '';
  • 도메인
  • 브라우저
  • 운영체제
  • + =') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) { ?>
  • 접속기기
  • +
  • 시간
  • 요일
  • diff --git a/adm/visit_device.php b/adm/visit_device.php index 629a87d18..76aaffd39 100644 --- a/adm/visit_device.php +++ b/adm/visit_device.php @@ -17,7 +17,7 @@ $result = sql_query($sql); while ($row=sql_fetch_array($result)) { $s = $row['vi_device']; if(!$s) - $s = get_device($row['vi_agent']); + $s = '기타'; $arr[$s]++; @@ -65,7 +65,7 @@ while ($row=sql_fetch_array($result)) { } if (!$key) { - $key = 'Unknown'; + $key = '기타'; } $rate = ($count / $sum_count * 100); diff --git a/adm/visit_search.php b/adm/visit_search.php index 269c20b52..5ce251388 100644 --- a/adm/visit_search.php +++ b/adm/visit_search.php @@ -78,8 +78,6 @@ $listall = '처음'; //페이지 처 $os = get_os($row['vi_agent']); $device = $row['vi_device']; - if(!$device) - $device = get_device($row['vi_agent']); $link = ""; $referer = ""; diff --git a/bbs/visit_insert.inc.php b/bbs/visit_insert.inc.php index 994dcb1e7..624f20a33 100644 --- a/bbs/visit_insert.inc.php +++ b/bbs/visit_insert.inc.php @@ -15,12 +15,24 @@ if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) if (isset($_SERVER['HTTP_REFERER'])) $referer = escape_trim(clean_xss_tags($_SERVER['HTTP_REFERER'])); $user_agent = escape_trim(clean_xss_tags($_SERVER['HTTP_USER_AGENT'])); - // Browscap 캐시 파일이 있으면 실행 - if(is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { - $browscap = get_browscap_info($_SERVER['HTTP_USER_AGENT']); - $vi_browser = $browscap->Comment; - $vi_os = $browscap->Platform; - $vi_device = $browscap->Device_Type; + $vi_browser = ''; + $vi_os = ''; + $vi_device = ''; + if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) { + // Browscap 캐시 파일이 있으면 실행 + if(defined('G5_VISIT_BROWSCAP_USE') && G5_VISIT_BROWSCAP_USE && is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { + include_once(G5_PLUGIN_PATH.'/browscap/Browscap.php'); + + $browscap = new phpbrowscap\Browscap(G5_DATA_PATH.'/cache'); + $browscap->doAutoUpdate = false; + $browscap->cacheFilename = 'browscap_cache.php'; + + $info = $browscap->getBrowser($_SERVER['HTTP_USER_AGENT']); + + $vi_browser = $info->Comment; + $vi_os = $info->Platform; + $vi_device = $info->Device_Type; + } } $sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) "; diff --git a/config.php b/config.php index 4d19c4bae..f969d91a2 100644 --- a/config.php +++ b/config.php @@ -198,6 +198,12 @@ define('G5_IS_MOBILE_DHTML_USE', false); // MySQLi 사용여부를 설정합니다. define('G5_MYSQLI_USE', true); +// Browscap 사용여부를 설정합니다. +define('G5_BROWSCAP_USE', true); + +// 접속자 기록 때 Browscap 사용여부를 설정합니다. +define('G5_VISIT_BROWSCAP_USE', false); + // ip 숨김방법 설정 /* 123.456.789.012 ip의 숨김 방법을 변경하는 방법은 \\1 은 123, \\2는 456, \\3은 789, \\4는 012에 각각 대응되므로 diff --git a/lib/common.lib.php b/lib/common.lib.php index dbce98d82..80d90b64a 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -3173,22 +3173,4 @@ function check_vaild_callback($callback){ return true; } } - -// Browscap 정보 얻기 -function get_browscap_info($agent) -{ - if(!$agent) - return false; - - include_once(G5_PLUGIN_PATH.'/browscap/Browscap.php'); - - $browscap = new phpbrowscap\Browscap(G5_DATA_PATH.'/cache'); - $browscap->updateMethod = 'cURL'; - $browscap->doAutoUpdate = false; - $browscap->cacheFilename = 'browscap_cache.php'; - - $info = $browscap->getBrowser($agent); - - return $info; -} ?> \ No newline at end of file diff --git a/lib/visit.lib.php b/lib/visit.lib.php index 1abde1dac..1808fd5f7 100644 --- a/lib/visit.lib.php +++ b/lib/visit.lib.php @@ -50,22 +50,51 @@ function visit($skin_dir='basic') // get_browser() 함수는 이미 있음 function get_brow($agent) { - $info = get_browscap_info($agent); + $agent = strtolower($agent); - return $info->Comment; + //echo $agent; echo "
    "; + + if (preg_match("/msie ([1-9][0-9]\.[0-9]+)/", $agent, $m)) { $s = 'MSIE '.$m[1]; } + else if(preg_match("/firefox/", $agent)) { $s = "FireFox"; } + else if(preg_match("/chrome/", $agent)) { $s = "Chrome"; } + else if(preg_match("/x11/", $agent)) { $s = "Netscape"; } + else if(preg_match("/opera/", $agent)) { $s = "Opera"; } + else if(preg_match("/gec/", $agent)) { $s = "Gecko"; } + else if(preg_match("/bot|slurp/", $agent)) { $s = "Robot"; } + else if(preg_match("/internet explorer/", $agent)) { $s = "IE"; } + else if(preg_match("/mozilla/", $agent)) { $s = "Mozilla"; } + else { $s = "기타"; } + + return $s; } function get_os($agent) { - $info = get_browscap_info($agent); + $agent = strtolower($agent); - return $info->Platform; -} + //echo $agent; echo "
    "; -function get_device($agent) -{ - $info = get_browscap_info($agent); + if (preg_match("/windows 98/", $agent)) { $s = "98"; } + else if(preg_match("/windows 95/", $agent)) { $s = "95"; } + else if(preg_match("/windows nt 4\.[0-9]*/", $agent)) { $s = "NT"; } + else if(preg_match("/windows nt 5\.0/", $agent)) { $s = "2000"; } + else if(preg_match("/windows nt 5\.1/", $agent)) { $s = "XP"; } + else if(preg_match("/windows nt 5\.2/", $agent)) { $s = "2003"; } + else if(preg_match("/windows nt 6\.0/", $agent)) { $s = "Vista"; } + else if(preg_match("/windows nt 6\.1/", $agent)) { $s = "Windows7"; } + else if(preg_match("/windows nt 6\.2/", $agent)) { $s = "Windows8"; } + else if(preg_match("/windows 9x/", $agent)) { $s = "ME"; } + else if(preg_match("/windows ce/", $agent)) { $s = "CE"; } + else if(preg_match("/mac/", $agent)) { $s = "MAC"; } + else if(preg_match("/linux/", $agent)) { $s = "Linux"; } + else if(preg_match("/sunos/", $agent)) { $s = "sunOS"; } + else if(preg_match("/irix/", $agent)) { $s = "IRIX"; } + else if(preg_match("/phone/", $agent)) { $s = "Phone"; } + else if(preg_match("/bot|slurp/", $agent)) { $s = "Robot"; } + else if(preg_match("/internet explorer/", $agent)) { $s = "IE"; } + else if(preg_match("/mozilla/", $agent)) { $s = "Mozilla"; } + else { $s = "기타"; } - return $info->Device_Type; + return $s; } ?> \ No newline at end of file From 531817f5531678aa51908340cbb0f9c7fcff8cbf Mon Sep 17 00:00:00 2001 From: chicpro Date: Thu, 12 Nov 2015 17:38:19 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Browscap=20=EA=B4=80=EB=A0=A8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/browscap_convert.php | 6 ++++++ bbs/visit_browscap.inc.php | 21 +++++++++++++++++++++ bbs/visit_insert.inc.php | 15 +-------------- 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 bbs/visit_browscap.inc.php diff --git a/adm/browscap_convert.php b/adm/browscap_convert.php index c01a92af8..3a084101f 100644 --- a/adm/browscap_convert.php +++ b/adm/browscap_convert.php @@ -8,6 +8,10 @@ if(!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') if ($is_admin != 'super') alert('최고관리자만 접근 가능합니다.'); +$rows = preg_replace('#[^0-9]#', '', $_GET['rows']); +if(!$rows) + $rows = 100; + $g5['title'] = '접속로그 변환'; include_once('./admin.head.php'); ?> @@ -23,7 +27,9 @@ $(function() { $("#processing").html('

    Browscap 정보로 변환 중입니다.

    '); $.ajax({ + method: "GET", url: "./browscap_converter.php", + data: { rows: "" }, async: true, cache: false, dataType: "html", diff --git a/bbs/visit_browscap.inc.php b/bbs/visit_browscap.inc.php new file mode 100644 index 000000000..7bfd0db38 --- /dev/null +++ b/bbs/visit_browscap.inc.php @@ -0,0 +1,21 @@ +=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE)) + return; + +// Browscap 캐시 파일이 있으면 실행 +if(defined('G5_VISIT_BROWSCAP_USE') && G5_VISIT_BROWSCAP_USE && is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { + include_once(G5_PLUGIN_PATH.'/browscap/Browscap.php'); + + $browscap = new phpbrowscap\Browscap(G5_DATA_PATH.'/cache'); + $browscap->doAutoUpdate = false; + $browscap->cacheFilename = 'browscap_cache.php'; + + $info = $browscap->getBrowser($_SERVER['HTTP_USER_AGENT']); + + $vi_browser = $info->Comment; + $vi_os = $info->Platform; + $vi_device = $info->Device_Type; +} +?> \ No newline at end of file diff --git a/bbs/visit_insert.inc.php b/bbs/visit_insert.inc.php index 624f20a33..50a9bc709 100644 --- a/bbs/visit_insert.inc.php +++ b/bbs/visit_insert.inc.php @@ -19,20 +19,7 @@ if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) $vi_os = ''; $vi_device = ''; if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) { - // Browscap 캐시 파일이 있으면 실행 - if(defined('G5_VISIT_BROWSCAP_USE') && G5_VISIT_BROWSCAP_USE && is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { - include_once(G5_PLUGIN_PATH.'/browscap/Browscap.php'); - - $browscap = new phpbrowscap\Browscap(G5_DATA_PATH.'/cache'); - $browscap->doAutoUpdate = false; - $browscap->cacheFilename = 'browscap_cache.php'; - - $info = $browscap->getBrowser($_SERVER['HTTP_USER_AGENT']); - - $vi_browser = $info->Comment; - $vi_os = $info->Platform; - $vi_device = $info->Device_Type; - } + include_once(G5_BBS_PATH.'/visit_browscap.inc.php'); } $sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) "; From 6aeb32bf3f4f50932c071832908eaed097a0b416 Mon Sep 17 00:00:00 2001 From: chicpro Date: Thu, 12 Nov 2015 17:44:20 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/browscap_convert.php | 2 +- adm/browscap_converter.php | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/adm/browscap_convert.php b/adm/browscap_convert.php index 3a084101f..edf3b0d39 100644 --- a/adm/browscap_convert.php +++ b/adm/browscap_convert.php @@ -17,7 +17,7 @@ include_once('./admin.head.php'); ?>
    -

    접속로그 Browscap 정보로 변환하시려면 아래 업데이트 버튼을 클릭해 주세요.

    +

    접속로그 정보를 Browscap 정보로 변환하시려면 아래 업데이트 버튼을 클릭해 주세요.

    diff --git a/adm/browscap_converter.php b/adm/browscap_converter.php index 0b4983702..161b49643 100644 --- a/adm/browscap_converter.php +++ b/adm/browscap_converter.php @@ -11,14 +11,6 @@ if(!(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') if($is_admin != 'super') die('최고관리자로 로그인 후 실행해 주세요.'); -// 접속자 정보 필드 추가 -if(!sql_query(" select vi_browser from {$g5['visit_table']} limit 1 ")) { - sql_query(" ALTER TABLE `{$g5['visit_table']}` - ADD `vi_browser` varchar(255) NOT NULL DEFAULT '' AFTER `vi_agent`, - ADD `vi_os` varchar(255) NOT NULL DEFAULT '' AFTER `vi_browser`, - ADD `vi_device` varchar(255) NOT NULL DEFAULT '' AFTER `vi_os` ", true); -} - // browscap cache 파일 체크 if(!is_file(G5_DATA_PATH.'/cache/browscap_cache.php')) { echo '

    Browscap 정보가 없습니다. 아래 링크로 이동해 Browscap 정보를 업데이트 하세요.

    '.PHP_EOL;