// // $Id: statistics.php 10229 2010-07-27 14:21:39Z 2tl $ // if (!defined('AREA')) { die('Access denied'); } if ($mode == 'collect') { if (empty($_REQUEST['ve'])) { exit; } $ve = $_REQUEST['ve']; if (empty($ve['url'])) { exit; } $ve['timestamp'] = TIME; $ve['url'] = fn_stat_prepare_url($ve['url']); $ve['https'] = defined('HTTPS') ? 'Y' : 'N'; // Get current statistics session ID $sess_id = db_get_field("SELECT sess_id FROM ?:stat_sessions WHERE session = ?s AND expiry > ?i ORDER BY timestamp DESC LIMIT 1", Session::get_id(), TIME); if (empty($sess_id)) { $sess_id = fn_stat_save_session_data($ve); $ve['request_type'] = STAT_LAST_REQUEST; } else { db_query("UPDATE ?:stat_sessions SET expiry = ?i WHERE sess_id = ?s", TIME + SESSION_ALIVE_TIME, $sess_id); $last_url = db_get_field("SELECT url FROM ?:stat_requests WHERE sess_id = ?i AND (request_type & ?i) = ?i", $sess_id, STAT_LAST_REQUEST, STAT_LAST_REQUEST); // Check if user refreshed the page. if ($last_url == $ve['url']) { exit; } db_query("UPDATE ?:stat_requests SET request_type = request_type & " . STAT_ORDINARY_REQUEST . " WHERE sess_id = ?s", $sess_id); $ve['request_type'] = STAT_END_REQUEST;
function fn_statistics_track_robots($tpl_output, &$view) { if (strpos($tpl_output, '<title>') === false) { return $tpl_output; } $sess_id = db_get_field('SELECT sess_id FROM ?:stat_sessions WHERE uniq_code = ?i AND timestamp > ?i', fn_crc32($_SERVER['HTTP_USER_AGENT']), TIME - 24 * 60 * 60); if (empty($sess_id)) { $ip = fn_get_ip(true); $referer = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; $parse_url = parse_url($referer); $stat_data = array('user_agent' => $_SERVER['HTTP_USER_AGENT'], 'host_ip' => $ip['host'], 'proxy_ip' => $ip['proxy'], 'client_language' => $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'ip_id' => fn_stat_ip_exist($ip), 'client_type' => 'B', 'robot' => CRAWLER, 'referrer' => $referer, 'timestamp' => TIME, 'referrer_scheme' => empty($parse_url['scheme']) ? '' : $parse_url['scheme'], 'referrer_host' => empty($parse_url['host']) ? '' : $parse_url['host'], 'expiry' => 0, 'uniq_code' => fn_crc32($_SERVER['HTTP_USER_AGENT'])); $request_type = STAT_LAST_REQUEST; $sess_id = db_query('INSERT INTO ?:stat_sessions ?e', $stat_data); $last_url = ''; } else { $last_url = db_get_field("SELECT url FROM ?:stat_requests WHERE sess_id = ?i AND (request_type & ?i) = ?i", $sess_id, STAT_LAST_REQUEST, STAT_LAST_REQUEST); db_query("UPDATE ?:stat_requests SET request_type = request_type & " . STAT_ORDINARY_REQUEST . " WHERE sess_id = ?s", $sess_id); $request_type = STAT_END_REQUEST; } // Add to stat requests $this_url = fn_stat_prepare_url(REAL_URL); if ($last_url != $this_url) { $title = ''; if (preg_match_all('/\\<title\\>(.*?)\\<\\/title\\>/', $tpl_output, $m)) { $title = fn_html_escape($m[1][0], true); } $ve = array('sess_id' => $sess_id, 'timestamp' => TIME, 'url' => $this_url, 'title' => $title, 'https' => defined('HTTPS') ? 'Y' : 'N', 'loadtime' => microtime(true) - MICROTIME, 'request_type' => $request_type); db_query("INSERT INTO ?:stat_requests ?e", $ve); } return $tpl_output; }