File: /home/bk/efi/eficenter.ru/consultant/class/statistics.php
<?php
class Statistics{ private $ip = null; private $mysql = null; public function __construct(){ if($this->isBot()) exit; require_once 'mysql.php'; require_once 'set_moving.php'; $this->mysql = Mysql::getInstance(); $this->ip = $this->getIp(); if(isset($_GET['title'])){ $moving = new SetMoving($_GET['title'], $this->ip); $moving->set(); } if($this->isOnline()){ $this->updateTime(); setcookie('ok_last_visit', time(), 0x6FFFFFFF); $this->delOfflineIp(); }else{ require 'black_list.php'; BlackList::getUserIP($this->ip); $info = $this->getInfo(); $this->addIp($info); } } private function isBot(){ if(preg_match( "/(bot|Bot|BOT)/i", $_SERVER["HTTP_USER_AGENT"])) return true; else return false; } public function getIp(){ require_once 'ip.php'; return UserIP::getIP(); } public function delOfflineIp(){ $mysql = Mysql::getInstance(); $del_time = time() - 150; $sql = "SELECT user_ip FROM ok_online WHERE ltime < '{$del_time}'"; $res = $mysql->query($sql); if($res->columnCount() == 0){ return; }else{ while($del_ip = $res->fetch(PDO::FETCH_ASSOC)){ $sql = "DELETE FROM ok_online WHERE user_ip = {$del_ip['user_ip']}"; $mysql->exec($sql); $sql = "DELETE FROM ok_moving WHERE user_ip = {$del_ip['user_ip']}"; $mysql->exec($sql); $sql = "DELETE FROM ok_autodialog WHERE ip_user = {$del_ip['user_ip']}"; $mysql->exec($sql); } } } private function getInfo(){ $user_info = array(); require 'browser.php'; require 'geo_ip.php'; require 'country_code.php'; $user_info['ip'] = long2ip($this->ip); $geo = new SxGeo(); $geo_info = $geo->getCityFull(long2ip($this->ip)); if(empty($geo_info['country'])){ $geo_info['country'] = 'RU'; } $user_info['country'] = CountyCode::code2country($geo_info['country']); $user_info['code'] = $geo_info['country']; if(!empty($geo_info['city'])){ $user_info['city'] = $geo_info['city']; } if(!empty($geo_info['region_name'])){ $user_info['region_name'] = $geo_info['region_name']; } if(!empty($geo_info['timezone'])){ $user_info['timezone'] = $geo_info['timezone']; } $brouser = new Browser(); $user_info['browser'] = $brouser->getBrowser(); $user_info['version'] = $brouser->getVersion(); $user_info['os'] = $this->getOS(); $this->getUrl($user_info); $this->getVisits($user_info); unset($geo_info); unset($geo); unset($brouser); return $user_info; } private function isOnline(){ $sql = "SELECT user_ip FROM ok_online WHERE user_ip = {$this->ip}"; $res = $this->mysql->query($sql); $error = $this->mysql->errorInfo(); if($error[0] != 0){ $sql_table = "CREATE TABLE IF NOT EXISTS ok_online(
user_ip BIGINT(12) NOT NULL PRIMARY KEY,
ctime INT(10) NOT NULL,
ltime INT(10) NOT NULL,
user_info VARCHAR(4000) NOT NULL,
country CHAR(2) NOT NULL
)ENGINE=MEMORY"; $this->mysql->exec($sql_table); $this->isOnline(); return; } if($res->rowCount() == 1) return true; else return false; } private function addIp(array $info){ $ctime = time(); $info_s = serialize($info); $sql = "INSERT INTO ok_online VALUES({$this->ip}, '{$ctime}', '{$ctime}', '{$info_s}', '{$info['code']}')"; $count = $this->mysql->exec($sql); if($count == 1){ if(isset($_COOKIE['ok_visits'])){ $visit = intval($_COOKIE['ok_visits']) + 1; setcookie('ok_visits', $visit, 0x6FFFFFFF, '/'); }else{ setcookie('ok_visits', 1, 0x6FFFFFFF, '/'); } setcookie('ok_last_visit', time(), 0x6FFFFFFF); } } public function getOS(){ $r = $_SERVER['HTTP_USER_AGENT']; $d = array($r); $os_p = array("|Windows\sNT\s5.1|", "|Windows\sNT\s5.0|", "|Windows\s98|", "|Linux\si686|", "|Windows\sNT\s6.1|", "|Windows\sNT\s6.0|", "|os\sx|", "|Macintosh|", "|Windows\sNT\s6.2|", "|Windows\sNT\s5.2|"); $os = array("Windows XP", "Windows 2000", "Windows 98", "Linux", "Windows 7", "Windows Vista", "Mac OS", "Mac OS", "Windows 8", "Windows XP"); $count = count($os); for($j=0; $j<$count; $j++){ if(preg_match($os_p[$j], $r, $mas)){ return str_replace($mas[0], $os[$j], $mas[0]); } } } public function getVisits(&$user_info){ if(isset($_COOKIE['ok_visits'])) $user_info['visits'] = intval($_COOKIE['ok_visits']) + 1; else $user_info['visits'] = 1; if(isset($_COOKIE['ok_last_visit'])){ $user_info['last_visit'] = date("Y-m-d H-i-s", intval($_COOKIE['ok_last_visit'])); } } public function getUrl(&$user_info){ $text = ""; $query = ""; $q = ""; $p = ""; $r = ""; $url = "/"; $user_info['is_finder'] = true; if ($_GET['ref']) $url = $_GET['ref']; if(stripos($url, 'yandex') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "text"); parse_str($query_argument); if ($text != ""){ $user_info['search_engine'] = "yandex.ru"; $user_info['query_value'] = $text; } }elseif(stripos($url, 'google') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "q"); parse_str($query_argument); if ($q != ""){ $user_info['search_engine'] = "google.ru"; $user_info['query_value'] = $q; } }elseif(stripos($url, 'rambler') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "query"); parse_str($query_argument); if ($query != ""){ $user_info['search_engine'] = "rambler.ru"; $user_info['query_value'] = $query; } }elseif(stripos($url, 'go.mail.ru') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "q"); parse_str($query_argument); if ($q != ""){ $user_info['search_engine'] = "go.mail.ru"; $user_info['query_value'] = $q; } }elseif(stripos($url, 'yahoo') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "p"); parse_str($query_argument); if ($p != ""){ $user_info['search_engine'] = "yahoo.com"; $user_info['query_value'] = $p; } }elseif(stripos($url, 'search.aport.ru') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "r"); parse_str($query_argument); if ($r != ""){ $user_info['search_engine'] = "aport.ru"; $user_info['query_value'] = $r; } }elseif(stripos($url, 'bing') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "q"); parse_str($query_argument); if ($q != ""){ $user_info['search_engine'] = "bing.com"; $user_info['query_value'] = $q; } }elseif(stripos($url, 'nigma') !== false){ $query_argument = urldecode($url); $query_argument = strstr($query_argument, "s"); parse_str($query_argument); if ($s != ""){ $user_info['search_engine'] = "nigma.ru"; $user_info['query_value'] = $s; } }else{ $user_info['is_finder'] = false; $user_info['referer'] = $url; } } public function updateTime(){ $ltime = time(); $sql = "UPDATE ok_online SET ltime = '{$ltime}' WHERE user_ip = {$this->ip}"; $this->mysql->exec($sql); } } ?>