AvocadoAmber/AvocadoEdition_Light/bbs/visit_insert.inc.php

69 lines
3 KiB
PHP
Raw Normal View History

2022-09-17 20:50:50 +09:00
<?php
2024-09-19 20:57:39 +09:00
if (!defined('_GNUBOARD_'))
exit; // 개별 페이지 접근 불가
2022-09-17 20:50:50 +09:00
// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
2024-09-19 20:57:39 +09:00
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) {
set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장
2022-09-17 20:50:50 +09:00
2024-09-30 01:58:32 +09:00
$tmp_row = sql_fetch("SELECT max(vi_id) as max_vi_id FROM {$g5['visit_table']} ");
2024-09-19 20:57:39 +09:00
$vi_id = $tmp_row['max_vi_id'] + 1;
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
$remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
$referer = "";
if (isset($_SERVER['HTTP_REFERER']))
$referer = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_REFERER'])));
$user_agent = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_USER_AGENT'])));
2024-09-19 20:57:39 +09:00
$vi_browser = '';
$vi_os = '';
$vi_device = '';
if (version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) {
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}' ) ";
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
$result = sql_query($sql, FALSE);
// 정상으로 INSERT 되었다면 방문자 합계에 반영
if ($result) {
$sql = " insert {$g5['visit_sum_table']} ( vs_count, vs_date) values ( 1, '" . G5_TIME_YMD . "' ) ";
2022-09-17 20:50:50 +09:00
$result = sql_query($sql, FALSE);
2024-09-19 20:57:39 +09:00
// DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
if (!$result) {
2024-09-30 01:58:32 +09:00
$sql = "UPDATE {$g5['visit_sum_table']} SET vs_count = vs_count + 1 where vs_date = '" . G5_TIME_YMD . "' ";
2024-09-19 20:57:39 +09:00
$result = sql_query($sql);
}
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
// 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// 오늘
2024-09-30 01:58:32 +09:00
$sql = "SELECT vs_count as cnt FROM {$g5['visit_sum_table']} where vs_date = '" . G5_TIME_YMD . "' ";
2024-09-19 20:57:39 +09:00
$row = sql_fetch($sql);
$vi_today = $row['cnt'];
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// 어제
2024-09-30 01:58:32 +09:00
$sql = "SELECT vs_count as cnt FROM {$g5['visit_sum_table']} where vs_date = DATE_SUB('" . G5_TIME_YMD . "', INTERVAL 1 DAY) ";
2024-09-19 20:57:39 +09:00
$row = sql_fetch($sql);
$vi_yesterday = $row['cnt'];
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// 최대
2024-09-30 01:58:32 +09:00
$sql = "SELECT max(vs_count) as cnt FROM {$g5['visit_sum_table']} ";
2024-09-19 20:57:39 +09:00
$row = sql_fetch($sql);
$vi_max = $row['cnt'];
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// 전체
2024-09-30 01:58:32 +09:00
$sql = "SELECT sum(vs_count) as total FROM {$g5['visit_sum_table']} ";
2024-09-19 20:57:39 +09:00
$row = sql_fetch($sql);
$vi_sum = $row['total'];
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
$visit = '오늘:' . $vi_today . ',어제:' . $vi_yesterday . ',최대:' . $vi_max . ',전체:' . $vi_sum;
2022-09-17 20:50:50 +09:00
2024-09-19 20:57:39 +09:00
// 기본설정 테이블에 방문자수를 기록한 후
// 방문자수 테이블을 읽지 않고 출력한다.
// 쿼리의 수를 상당부분 줄임
2024-09-30 01:58:32 +09:00
sql_query("UPDATE {$g5['config_table']} SET cf_visit = '{$visit}' ");
2024-09-19 20:57:39 +09:00
}
2022-09-17 20:50:50 +09:00
}