File "easyiit_stats.class.php"
Full Path: /www/wwwroot/shphe-en.com/wp-content/plugins/easyiit_stats.class.php
File size: 16.76 KB
MIME-type: --
Charset: utf-8
<?php
class easyiit_stats
{
private static $ip = NULL;
private static $siteurl = NULL;
private static $ip_area = NULL;
function __construct() {
}
public function init(){
$ip = $this->ip();
if(in_array($ip,['49.51.244.7','170.106.76.202','49.51.34.216','124.156.185.151','101.32.221.154','45.136.131.71'])){
exit;
}
if(empty($ip)){
echo 'no ip';exit;
}
$country = $this->get_ip_country($ip);
$this->ip_area = $country;
if($country == '中国' || $country==""){
exit();
}
$is_lang = 0;
$request = $this->get_request();
$langs = json_decode(file_get_contents(__DIR__.'/lang.json'),true);
foreach ($langs as $v){
if(strpos($request,'/'.$v['short'].'/') !== false || strpos($request,'/'.$v['short'].'.') !== false){
$is_lang = 1;break;
}
}
if($is_lang == 1 && ($country == '美国' || $country == '新加坡')){
exit();
}
if($this->get_user_agent() == 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5478.0 Safari/537.36' && $this->get_referrer() == ''){
exit();
}
if($this->get_referrer() == '' && strpos($request,'keyword=') !== false){
exit;
}
$cdn_setting = get_option("gd_cdn_setting");
$cdn_weburl = $cdn_setting['weburl'];
$top_url = $this->getTopHost($cdn_weburl);
if(strpos($request,$top_url) === false){
exit();
}
if(strpos($request,'quanqiusou.cn') !== false || strpos($request,'goodao.net') !== false){
exit();
}
if(!$this->check_ip_day($ip)){
$this->add_day_ip();
$this->add_day_data();
$this->update_day_ip_count();
$this->update_day_pv_count();
$this->update_day_uv_count();
$this->update_moth_count();
$this->update_year_count();
}else {
$this->add_day_data();
$this->update_day_pv();
$this->update_day_pv_count();
$this->update_day_uv_count();
$this->update_moth_count();
$this->update_year_count();
}
}
public function getTopHost($url){
$url = strtolower($url);
$hosts = parse_url($url);
$host = $hosts['host'];
$data = explode('.', $host);
$n = count($data);
$preg = '/[\w].+\.(com|net|org|gov|edu)\.cn$/';
if(($n > 2) && preg_match($preg,$host)){
$host = $data[$n-3].'.'.$data[$n-2].'.'.$data[$n-1];
}else{
$host = $data[$n-2].'.'.$data[$n-1];
}
return $host;
}
public function ip(){
if(isset($_GET["ip"])){
return $_GET["ip"];
}else{
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}
}
public function get_referrer(){
$referrer = isset($_GET["referrer"]) ? substr(urldecode($_GET["referrer"]),0,255) : "";
if(strpos($referrer,'google') || strpos($referrer,'facebook') || strpos($referrer,'bing') || strpos($referrer,'yahoo') || strpos($referrer,'youtube') || strpos($referrer,'linkedin') || strpos($referrer,'messefrankfurt') || strpos($referrer,'yandex')){
$referrer = str_replace('http://','https://',$referrer);
if($referrer == 'https://www.google.com'){
$referrer = $referrer.'/';
}
return $referrer;
}elseif($referrer == ""){
return '';
}else{
return 'https://www.google.com/';
}
}
public function get_request(){
$request = isset($_GET["currweb"]) ? substr(urldecode($_GET["currweb"]),0,255) : "";
if(strpos($request,home_url('/') === false)){
$request = home_url('/');
}
return $request;
}
public function get_server_name(){
return $_SERVER['SERVER_NAME'];
}
public function get_user_agent(){
if(isset($_GET['user_agent'])){
$agent = urldecode($_GET['user_agent']);
}else{
$agent = $_SERVER['HTTP_USER_AGENT'];
}
if(strpos($agent,'hubspot') === false){
return $agent;
}else{
exit;
}
}
public function get_referrer_head(){
$referrer = $this->get_referrer();
return $referrer_head=isset($referrer) ? breakurl($referrer) : "";
}
public function isCrawler(){
$agent= strtolower($this->get_user_agent());
if (!empty($agent)) {
$spiderSite= array(
"TencentTraveler",
"Baiduspider+",
"BaiduGame",
"Googlebot",
"msnbot",
"Sosospider+",
"Sogou web spider",
"ia_archiver",
"Yahoo! Slurp",
"YoudaoBot",
"Yahoo Slurp",
"MSNBot",
"Java (Often spam bot)",
"BaiDuSpider",
"Voila",
"Yandex bot",
"BSpider",
"twiceler",
"Sogou Spider",
"Speedy Spider",
"Google AdSense",
"Heritrix",
"Python-urllib",
"Alexa (IA Archiver)",
"Ask",
"Exabot",
"Custo",
"OutfoxBot/YodaoBot",
"yacy",
"SurveyBot",
"legs",
"lwp-trivial",
"Nutch",
"StackRambler",
"The web archive (IA Archiver)",
"Perl tool",
"MJ12bot",
"Netcraft",
"MSIECrawler",
"WGet tools",
"larbin",
"Fish search",
"yandex.com/bots",
"google.com/bot",
"bingbot",
"YandexMobileBot",
"BingPreview",
"AhrefsBot",
"bot",
"spider",
"crawl"
);
$flag = 0;
foreach($spiderSite as $val) {
$str = strtolower($val);
if (strpos($agent, $str) !== false) {
$flag = 1;
}
}
if($flag == 1){
return true;
}else{
return false;
}
} else {
return false;
}
}
public function isMobile(){
if(isset($_GET['is_mobile'])){
if($_GET['is_mobile'] == 1){
return true;
}else{
return false;
}
}else{
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
return true;
}
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA'])){
// 找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])){
$clientkeywords = array ('nokia',
'sony',
'ericsson',
'mot',
'samsung',
'htc',
'sgh',
'lg',
'sharp',
'sie-',
'philips',
'panasonic',
'alcatel',
'lenovo',
'iphone',
'ipod',
'blackberry',
'meizu',
'android',
'netfront',
'symbian',
'ucweb',
'windowsce',
'palm',
'operamini',
'operamobi',
'openwave',
'nexusone',
'cldc',
'midp',
'wap',
'mobile'
);
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))){
return true;
}
}
// 协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])){
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))){
return true;
}
}
return false;
}
}
public function is_old_user(){
global $wpdb;
$ip = $this->ip();
$res = $wpdb->get_row("SELECT count(*) as cnt FROM ".$wpdb->prefix."stats_day_ip WHERE ip='".$ip."'",ARRAY_A);
if($res['cnt'] > 0){ return true; }else{ return false; }
}
public function is_future_cat(){
global $wpdb;
$res = $wpdb->get_row( "select p.id from wp_posts as p inner join wp_term_relationships as re on p.ID=re.object_id where re.term_taxonomy_id=635 and p.guid='".$this->get_request()."'" );
if($res){
return home_url('/');
}else{
return $this->get_request();
}
}
public function add_day_ip(){
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$res = $wpdb->insert($wpdb->prefix .'stats_day_ip',
array(
'day' => date('Y-m-d'),
'ip' => $this->ip(),
'ip_area' => $this->ip_area,
'update' => time(),
'pv' => 1,
'uv' => 1,
'request' => $this->is_future_cat(),
'referrer' => $this->get_referrer(),
'is_spider' => $this->isCrawler()?0:1,
'is_moblie' => $this->isMobile()?1:0,
'is_old_user' => $this->is_old_user()?0:1,
),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
));
return $res;
}
public function add_day_data(){
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
return $wpdb->insert($wpdb->prefix .'stats_day_data',
array(
'day_at' => date('Y-m-d'),
'year' => date('Y'),
'moth' => date('m'),
'day' => date('d'),
'ip' => $this->ip(),
'ip_area' => $this->ip_area,
'time' => time(),
'time_str' => date('Y-m-d H:i:s'),
'remote_host' => $this->ip(),
'request' => $this->is_future_cat(),
'referrer' => $this->get_referrer(),
'user_agent' => $this->get_user_agent(),
),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
));
}
public function check_ip_day($ip){
global $wpdb;
$day = date('Y-m-d');
$res = $wpdb->get_row( "SELECT ip FROM ".$wpdb->prefix."stats_day_ip WHERE ip='$ip' AND day ='$day'" );
if($res->ip){
return $res->ip;
}
return false;
}
public function check_request_day(){
global $wpdb;
$year = date('Y');
$moth = date('m');
$day = date('d');
$ip = $this->ip();
$request = $this->get_request();
$res = $wpdb->get_row( "SELECT ip FROM ".$wpdb->prefix."stats_day_data WHERE ip='$ip' AND year = '$year' AND moth = '$moth' AND day ='$day' AND request ='$request';" );
if($res->ip){
return $res->ip;
}
return false;
}
public function update_day_pv(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$ip = $this->ip();
$day = date('Y-m-d');
if(!$_COOKIE['easyiit_stats']){
$wpdb->query("update `".$wpdb->prefix."stats_day_ip` set `uv`=`uv`+1 WHERE `day` = '".$day."' AND `ip`='".$ip."'");
}
return $wpdb->query("update `".$wpdb->prefix."stats_day_ip` set `pv`=`pv`+1 WHERE `day` = '".$day."' AND `ip`='".$ip."'");
}
public function update_day_ip_count(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$day = date('Y-m-d');
$res = $wpdb->get_row( "SELECT count(*) as num FROM ".$wpdb->prefix."stats_day_count WHERE day ='$day'" );
if($res->num > 0){
return $wpdb->query("update `".$wpdb->prefix."stats_day_count` set `ip`=`ip`+1 WHERE `day`='$day'");
}else{
return $wpdb->insert($wpdb->prefix .'stats_day_count',
array(
'day' => date('Y-m-d'),
'ip' => 1,
'pv' => 0,
'uv' => 1,
'updatetime' => time(),
),
array(
'%s',
'%s',
'%s',
'%s',
'%s'
));
}
return false;
}
public function update_day_pv_count(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$day = date('Y-m-d');
if(!$this->isCrawler()){
return $wpdb->query("update `".$wpdb->prefix."stats_day_count` set `pv`=`pv`+1 WHERE `day`='$day'");
}
}
public function update_day_uv_count(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
if(!$this->isCrawler()){
global $wpdb;
$day = date('Y-m-d');
if(!$_COOKIE['easyiit_stats']){
$wpdb->query("update `".$wpdb->prefix."stats_day_count` set `uv`=`uv`+1 WHERE `day`='$day'");
return true;
}else{
return false;
}
}
}
public function update_moth_count(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$year = date('Y');
$moth = intval(date('m'));
$t = time();
$res = $wpdb->get_row( "SELECT count(*) as num,updatetime FROM ".$wpdb->prefix."stats_moth_count WHERE year = $year AND moth = $moth" );
if($res->num > 0){
//if((time()-$res->updatetime)>3600){
$sum_data = $wpdb->get_row("SELECT SUM(ip) as ip_num,SUM(pv) as pv_num,SUM(uv) as uv_num FROM ".$wpdb->prefix."stats_day_count WHERE date_format(`day`, '%Y%m') = date_format(curdate(), '%Y%m')");
return $wpdb->query("update `".$wpdb->prefix."stats_moth_count` set `ip`='$sum_data->ip_num',`pv`='$sum_data->pv_num', `uv`='$sum_data->uv_num', `updatetime`= '$t' WHERE year = $year AND moth = $moth");
//}
}else{
$sum_data = $wpdb->get_row( "SELECT SUM(ip) as ip_num, SUM(pv) as pv_num, SUM(uv) as uv_num FROM ".$wpdb->prefix."stats_day_count WHERE date_format(`day`, '%Y%m') = date_format(curdate() , '%Y%m')" );
return $wpdb->insert($wpdb->prefix .'stats_moth_count',
array(
'year' => $year,
'moth' => $moth,
'ip' => $sum_data->ip_num,
'pv' => $sum_data->pv_num,
'uv' => $sum_data->uv_num,
'updatetime' => time(),
),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
));
}
return false;
}
public function update_year_count(){
if($this->isCrawler()){
return false;
}
if(strpos($this->get_referrer(),'admin/') || strpos($this->is_future_cat(),'admin/')){
return false;
}
global $wpdb;
$year = date('Y');
$t = time();
$res = $wpdb->get_row( "SELECT count(*) as num,updatetime FROM ".$wpdb->prefix."stats_year_count WHERE year = $year" );
if($res->num > 0 ){
//if((time()-$res->updatetime)>3600*24){
$sum_data = $wpdb->get_row("SELECT SUM(ip) as ip_num,SUM(pv) as pv_num,SUM(uv) as uv_num FROM ".$wpdb->prefix."stats_moth_count WHERE year = $year");
return $wpdb->query("update `".$wpdb->prefix."stats_year_count` set `ip`='$sum_data->ip_num',`pv`='$sum_data->pv_num', `uv`='$sum_data->uv_num', `updatetime`= '$t' WHERE year = $year");
//}
}else{
$sum_data = $wpdb->get_row( "SELECT SUM(ip) as ip_num,SUM(pv) as pv_num,SUM(uv) as uv_num FROM ".$wpdb->prefix."stats_moth_count WHERE year = $year" );
return $wpdb->insert($wpdb->prefix .'stats_year_count',
array(
'year' => $year,
'ip' => $sum_data->ip_num,
'pv' => $sum_data->pv_num,
'uv' => $sum_data->uv_num,
'updatetime' => time(),
),
array(
'%s',
'%s',
'%s',
'%s',
'%s'
));
}
return false;
}
public function show_country_count(){
return $sql = 'select * from (
select count(1) ip_area,ip_area show_area,pv show_pv
from '.$wpdb->prefix.'stats_day_ip t
group by t.ip_area
order by count(1) desc
) t_1 limit 0, 10';
}
public function reset_stats(){
global $wpdb;
$table = $wpdb->prefix . "stats_day_ip";
$wpdb->query("truncate table $table");
$table = $wpdb->prefix . "stats_day_data";
$wpdb->query("truncate table $table");
$table = $wpdb->prefix . "stats_day_count";
$wpdb->query("truncate table $table");
$table = $wpdb->prefix . "stats_moth_count";
$wpdb->query("truncate table $table");
$table = $wpdb->prefix . "stats_year_count";
$wpdb->query("truncate table $table");
return true;
}
public function get_ip_country($ip){
if(isset($_GET['ip_area'])){
if($_GET['ip_area'] == 'Unknown'){
$country = file_get_contents("http://ip.globalso.com/?ip=".$ip);
if($country){
return $country;
}else{
return "Unknown";
}
}
return $_GET['ip_area'];
}else{
$country = file_get_contents("http://ip.globalso.com/?ip=".$ip);
if($country){
return $country;
}else{
return "Unknown";
}
}
}
}