통계 프로그램 만들고있는데 full url 저장..
안녕하세요 현재 ai 와 통계 프로그램을 만들고 있습니다
핵심 코드는 아래와 같은데요.. 모바일 접속시에는 유입경로를 파라미터를 포함한 주소를 받고 싶은데..
그게 잘 안되네요 ㅠㅠ
Copy
<?php
if (!defined('_GNUBOARD_')) exit;
// --------------------------------------------------------------------------------
// [데이터 준비] 일반 접속 vs 외부 트래킹 접속 구분
// --------------------------------------------------------------------------------
if (defined('G5_IS_TRACKING_SCRIPT')) {
// 외부 스크립트(tracker.php)를 통해 호출된 경우 파라미터로 전달받음
$an_current_url = isset($_GET['url']) ? $_GET['url'] : '';
// 만약 파라미터로 URL이 안 넘어왔다면 서버 변수로 추정 시도
if (!$an_current_url) {
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? "https://" : "http://";
$an_current_url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
$an_referer_raw = isset($_GET['ref']) ? $_GET['ref'] : '';
// [추가] 화면 정보 받기
$an_screen_width = isset($_GET['w']) ? (int)$_GET['w'] : 0;
$an_screen_height = isset($_GET['h']) ? (int)$_GET['h'] : 0;
$an_pixel_ratio = isset($_GET['r']) ? (float)$_GET['r'] : 1.0;
} else {
// 일반 접속 (그누보드 페이지 내 실행)
// 1. 프로토콜 확인 (로드밸런서/프록시 환경 고려)
$is_https = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on');
if (!$is_https && isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$is_https = true;
}
$protocol = $is_https ? "https://" : "http://";
// 2. 포트 확인 (표준 포트가 아닌 경우 포함)
$port = "";
if (isset($_SERVER['SERVER_PORT'])) {
if (($is_https && $_SERVER['SERVER_PORT'] != '443') || (!$is_https && $_SERVER['SERVER_PORT'] != '80')) {
$port = ":" . $_SERVER['SERVER_PORT'];
}
}
// 3. 전체 URL 조립
$an_current_url = $protocol . $_SERVER['HTTP_HOST'] . $port . $_SERVER['REQUEST_URI'];
$an_referer_raw = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$an_screen_width = 0;
$an_screen_height = 0;
$an_pixel_ratio = 1.0;
}
// --------------------------------------------------------------------------------
// [필터링 설정] 불필요한 로그 수집 방지
// --------------------------------------------------------------------------------
if (defined('G5_IS_ADMIN') || strpos($_SERVER['REQUEST_URI'], '/adm/') !== false) return;
if (strtoupper($_SERVER['REQUEST_METHOD']) !== 'GET') return;
if (!defined('G5_IS_TRACKING_SCRIPT')) {
if (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false) return;
}
$exclude_patterns = array(
'.css', '.js', '.png', '.jpg', '.gif', '.ico',
'ajax', '/rb/', 'rb.css', 'rb.config',
'wcslog.js', 'favicon', 'tracker.php'
);
foreach ($exclude_patterns as $pattern) {
if (stripos($an_current_url, $pattern) !== false) return;
}
// --------------------------------------------------------------------------------
// [User-Agent 분석 함수]
// --------------------------------------------------------------------------------
function get_user_agent_info() {
$agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$info = array('device' => 'PC', 'os' => 'Unknown', 'browser' => 'Unknown');
// 1. 기기 구분
if (preg_match('/(iPhone|Android|Mobile|iPod|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera Mini|CriOS|Mobile Safari)/i', $agent)) {
$info['device'] = 'Mobile';
}
// 2. 운영체제 (OS)
if (preg_match('/android/i', $agent)) {
$info['os'] = 'Android';
} elseif (preg_match('/iphone/i', $agent)) {
$info['os'] = 'iOS (iPhone)';
} elseif (preg_match('/ipad/i', $agent)) {
$info['os'] = 'iOS (iPad)';
$info['device'] = 'Tablet';
} elseif (preg_match('/macintosh|mac os/i', $agent)) {
$info['os'] = 'Mac OS';
} elseif (preg_match('/windows|win32/i', $agent)) {
$info['os'] = 'Windows';
} elseif (preg_match('/linux/i', $agent)) {
$info['os'] = 'Linux';
}
// 3. 브라우저
if (preg_match('/KAKAOTALK/i', $agent)) {
$info['browser'] = 'KakaoTalk InApp';
} elseif (preg_match('/NAVER/i', $agent)) {
$info['browser'] = 'Naver InApp';
} elseif (preg_match('/SamsungBrowser/i', $agent)) {
$info['browser'] = 'Samsung Internet';
} elseif (preg_match('/Whale/i', $agent)) {
$info['browser'] = 'Naver Whale';
} elseif (preg_match('/Edg/i', $agent)) {
$info['browser'] = 'Edge';
} elseif (preg_match('/Chrome/i', $agent)) {
$info['browser'] = 'Chrome';
} elseif (preg_match('/Safari/i', $agent)) {
$info['browser'] = 'Safari';
} elseif (preg_match('/Firefox/i', $agent)) {
$info['browser'] = 'Firefox';
} elseif (preg_match('/MSIE|Trident/i', $agent)) {
$info['browser'] = 'Internet Explorer';
}
// 모델명 추출 시도 (안드로이드)
if ($info['os'] == 'Android') {
if (preg_match('/\bAndroid\s+[^;]+;\s*([^;)]+)/', $agent, $matches)) {
$model = trim($matches[1]);
if (!preg_match('/^[a-z]{2}-[a-z]{2}$/i', $model)) {
$info['os'] .= ' (' . $model . ')';
}
}
}
return $info;
}
// --------------------------------------------------------------------------------
// [로그 수집 시작]
// --------------------------------------------------------------------------------
if (!get_session('ss_analytics_id')) {
set_session('ss_analytics_id', session_id());
}
$an_session_id = get_session('ss_analytics_id');
$an_ip = $_SERVER['REMOTE_ADDR'];
$an_mb_id = isset($member['mb_id']) ? $member['mb_id'] : '';
$an_event_type = 'view'; // 기본값
// 기기 정보 가져오기
$ua_info = get_user_agent_info();
$an_device = $ua_info['device'];
$an_os = $ua_info['os'];
$an_browser = $ua_info['browser'];
// 유입 경로 처리
$an_referer = '';
if ($an_referer_raw) {
if (strpos($an_referer_raw, $_SERVER['HTTP_HOST']) === false) {
$an_referer = $an_referer_raw;
}
}
// --------------------------------------------------------------------------------
// [전환(구매/가입) 체크 및 중복 방지 로직]
// --------------------------------------------------------------------------------
// 1. 구매 체크
// 조건: orderinquiryview.php + od_id 존재 + new=1 존재 (신규 주문 완료 URL 특징)
if (strpos($an_current_url, 'orderinquiryview.php') !== false
&& strpos($an_current_url, 'od_id') !== false
&& strpos($an_current_url, 'new=1') !== false) {
// [중복 방지] 해당 주문번호로 이미 기록된 구매가 있는지 확인
$od_id_val = '';
// URL에서 od_id 값 추출
if (preg_match('/od_id=([^&]+)/', $an_current_url, $matches)) {
$od_id_val = $matches[1];
}
if ($od_id_val) {
// DB에서 같은 주문번호의 purchase 이벤트 조회
$chk_sql = " SELECT id FROM g5_custom_analytics
WHERE event_type = 'purchase'
AND page_url LIKE '%od_id=" . addslashes($od_id_val) . "%'
LIMIT 1 ";
$chk_row = sql_fetch($chk_sql);
// 기존 기록이 없을 때만 구매로 인정
if (!$chk_row['id']) {
$an_event_type = 'purchase';
}
}
}
// 2. 가입 체크
// 조건: register_result.php (가입 완료)
else if (strpos($an_current_url, 'register_result.php') !== false) {
// [중복 방지] 해당 세션에서 이미 가입 처리가 되었는지 확인
$chk_sql = " SELECT id FROM g5_custom_analytics
WHERE event_type = 'signup'
AND session_id = '{$an_session_id}'
LIMIT 1 ";
$chk_row = sql_fetch($chk_sql);
if (!$chk_row['id']) {
$an_event_type = 'signup';
}
}
// DB 저장 (화면 정보 컬럼 추가)
// page_url에 전체 URL이 저장되도록 $an_current_url 사용
$sql = " INSERT INTO g5_custom_analytics
SET session_id = '{$an_session_id}',
mb_id = '{$an_mb_id}',
ip_addr = '{$an_ip}',
page_url = '" . addslashes($an_current_url) . "',
referer = '" . addslashes($an_referer) . "',
event_type = '{$an_event_type}',
device = '{$an_device}',
os = '{$an_os}',
browser = '{$an_browser}',
screen_width = '{$an_screen_width}',
screen_height = '{$an_screen_height}',
pixel_ratio = '{$an_pixel_ratio}',
reg_date = '" . G5_TIME_YMDHIS . "' ";
sql_query($sql, false);
?>
답변 3개 / 댓글 1개
답변을 작성하려면 로그인이 필요합니다.
https://m.search.naver.com/
이렇게만 나오네요 ㅠㅠ 구글도 그러고 빙도 그래요 파라미터 값이 나와야 하는데 ㅠㅠ 난감하네요
파워링크 광고중인데 부정클릭자들 잡기 위함도 있고, 어디서 어떤 키워드로 유입이 되는지 보고 싶은데 어렵네요