数据采集脚本如下:

error_reporting(0);
date_default_timezone_set("PRC");
$environment = get_cfg_var('app_flow_develop') ? get_cfg_var('app_flow_develop') : 3;
define('BASEPATH',dirname(dirname(__FILE__)));
switch($environment){
    case 1 :
        require BASEPATH . DIRECTORY_SEPARATOR . 'conf' . DIRECTORY_SEPARATOR . 'config.product.php';
        break;
    case 2 :
        require BASEPATH . DIRECTORY_SEPARATOR . 'conf' . DIRECTORY_SEPARATOR . 'config.product.php';
        break;
    default:
        require BASEPATH . DIRECTORY_SEPARATOR . 'conf' . DIRECTORY_SEPARATOR . 'config.develop.php';
        break;
}
require BASEPATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'logger.class.php';
$log_base = new Logger($LOG_BASE . DIRECTORY_SEPARATOR . 'error.log');
//判断后是来着检查站点
if((!isset($_COOKIE['YPTJACCOUNT']) || $_COOKIE['YPTJACCOUNT'] != $_GET['si'])){
    exit(0);
}
//无会话记录也不会记录
if(!isset($_COOKIE['YPTJUUID'])){
    exit(0);
}
//获取客户端ip
get_request_ip();
//获取客户端请求时间
get_request_time();
//获取客户端的来源于关键词
get_request_su_kd();
//获取客户端请求的url地址分级
get_request_u();
//获取其他一般参数
get_other_params(); //cc : 是否支持写数据到浏览器(cookie,sessionStorage,localStorage,userData)
//ck : 是否支持cookie
//cl : 浏览器颜色位数
//ds : 浏览器分辨率
//fl : flash版本
//ja : 是否支持java
//ln : 浏览器语言
//si : 统计id,站点标示
//su : 来源url,只取了域名
//kd : 关键词
//tt : 站点title
//cf : m点 1,站点0
//uid : 会员id
//pt : 平台
//ocu : 操作系统
//ua : 浏览器类型
//tm : 请求时间
//ip : 请求ip
//u  : 站点url
//uuid:唯一用户标识
//basesu:原始su
//baseu:原始u
//basekd:原始关键词
//u1:一级连接
//u2:二级连接
//u3:三级连接
//u4:四级连接 $savelogA = array(
    'cc'=>$rq_cc,
    'ck'=>$rq_ck,
    'cl'=>$rq_cl,
    'ds'=>$rq_ds,
    'fl'=>$rq_fl,
    'ja'=>$rq_ja,
    'ln'=>$rq_ln,
    'si'=>$rq_si,
    'su'=>$rq_su,
    'kd'=>$rq_kd,
    'tt'=>$rq_tt,
    'cf'=>$rq_cf,
    'uid'=>$rq_uid,
    'pt'=>$rq_pt,
    'ocu'=>$rq_ocu,
    'ua'=>$rq_ua,
    'tm'=>$rq_tm,
    'ip'=>$rq_ip,
    'u'=>$rq_u,
    'uuid'=>$rq_uuid,
    'basesu'=>$rq_basesu,
    'baseu'=>$rq_baseu,
    'basekd'=>$rq_basekd,
    'u1'=>$rq_u1,
    'u2'=>$rq_u2,
    'u3'=>$rq_u3,
    'u4'=>$rq_u4
); //查找记录的目录路径
$time = time();
$Ymd = date("Ymd",$time);
$H = date("G",$time);
$i = floor(date("i",$time)/5);
$LOG_PATH = $LOG_BASE . DIRECTORY_SEPARATOR . $Ymd . DIRECTORY_SEPARATOR . $H . DIRECTORY_SEPARATOR . $i; //创建记录的目录文件夹
if(!file_exists($LOG_PATH)){
    $mk_re = mkdir($LOG_PATH,0777,true);
    if(false === $mk_re){
        $log_base -> error('mkdir '.$LOG_PATH. ' false');
    }
    chmod(dirname(dirname($LOG_PATH)),0777);
    chmod(dirname($LOG_PATH),0777);
    chmod($LOG_PATH,0777);
}
//随机记录文本
$rand = mt_rand(0,500); //做all.log的判断,如果这个目录合并过,日志追加.after后缀,以防时间不一致
if(file_exists($LOG_PATH .DIRECTORY_SEPARATOR . 'all.log')){
    $log_data  = new Logger($LOG_PATH .DIRECTORY_SEPARATOR . $rand . '.log.after');
    $log_data -> log(implode('~^~',$savelogA),false);
}else{
    $log_data  = new Logger($LOG_PATH .DIRECTORY_SEPARATOR . $rand . '.log');
    $log_data -> log(implode('~^~',$savelogA),false);
}
exit; function get_other_params(){
    global $rq_cc,$rq_ck,$rq_cl,$rq_ds,$rq_fl,$rq_ja,$rq_ln,$rq_si,$rq_tt,$rq_cf,$rq_uid,$rq_pt,$rq_ocu,$rq_ua,$rq_uuid;
    isset($_GET['cc']) ? $rq_cc = intval($_GET['cc']) : $rq_cc = 0;
    isset($_GET['ck']) ? $rq_ck = intval($_GET['ck']) : $rq_ck = 0;
    isset($_GET['cl']) && strlen($_GET['cl']) < 10 ? $rq_cl = $_GET['cl'] : $rq_cl = 0;
    isset($_GET['ds']) && strlen($_GET['ds']) < 10 ? $rq_ds = $_GET['ds'] : $rq_ds = 0;
    isset($_GET['fl']) ? $rq_fl = intval($_GET['fl']) : $rq_fl = 0;
    isset($_GET['ja']) ? $rq_ja = intval($_GET['ja']) : $rq_ja = 0;
    isset($_GET['ln']) && strlen($_GET['ln']) < 10 ? $rq_ln = $_GET['ln'] : $rq_ln = 0;
    isset($_GET['si']) ? $rq_si = $_GET['si'] : $rq_si = 0;
    isset($_GET['tt']) ? $rq_tt = $_GET['tt'] : $rq_tt = 0;
    isset($_GET['cf']) ? $rq_cf = intval($_GET['cf']) : $rq_cf = 0;
    isset($_GET['uid']) ? $rq_uid = intval($_GET['uid']) : $rq_uid = 0;
    isset($_GET['pt']) && strlen($_GET['pt']) < 10 ? $rq_pt = $_GET['pt'] : $rq_pt = 0;
    isset($_GET['ocu']) && strlen($_GET['ocu']) < 40 ? $rq_ocu = $_GET['ocu'] : $rq_ocu = 0;
    isset($_GET['ua']) && strlen($_GET['ua']) < 40 ? $rq_ua = $_GET['ua'] : $rq_ua = 0;
    isset($_COOKIE['YPTJUUID']) ? $rq_uuid = $_COOKIE['YPTJUUID'] : $rq_uuid = 0;
} function get_request_u(){
    global $rq_u,$rq_u1,$rq_u2,$rq_u3,$rq_u4,$rq_baseu;
    $rq_u = $rq_u1 = $rq_u2 = $rq_u3 = $rq_u4 = 0;
    $rq_baseu = isset($_GET['u']) ? $_GET['u'] : 0;
    if(isset($_GET['u']) && $_GET['u']){
        $rq_u = $_GET['u'];
        $u = str_replace(array('http://','https://'),'',$_GET['u']);
        if($pos = strpos($u,'?')){
            $u = substr($u,0,$pos);
        }
        $u = rtrim($u,'/');
        $a = explode('/',$u,4);
        isset($a[0]) ? $rq_u1 = $a[0] : false;
        isset($a[1]) ? $rq_u2 = "{$rq_u1}/{$a[1]}"  : false;
        isset($a[2]) ? $rq_u3 = "{$rq_u2}/{$a[2]}"  : false;
        isset($a[3]) ? $rq_u4 = "{$rq_u3}/{$a[3]}"  : false;
        $num = "rq_u" . count($a);
        $rq_u = $$num;
    }
} function get_request_su_kd(){
    global $rq_su,$rq_kd,$rq_basesu,$rq_basekd;
    $rq_su = $rq_kd = $rq_basekd = 0;
    $rq_basesu = isset($_GET['su']) ? $_GET['su'] : 0;
    if(isset($_GET['su']) && $parseA = parse_url($_GET['su'])){
        $rq_su = $parseA['host'];
        if($parseA['query']){
            parse_str($parseA['query'],$output);
            if( 'www.baidu.com' == $rq_su){
                if(isset($output['wd']) && isset($output['ie'])){
                    if($output['ie'] != 'utf-8'){
                        $rq_kd = urldecode(iconv($output['ie'],'utf-8',$output['wd']));
                    }else{
                        $rq_kd = urldecode($output['wd']);
                    }
                }
            }elseif( 'www.sogou.com' == $rq_su){
                if(isset($output['query']) && isset($output['ie'])){
                    if($output['ie'] != 'utf8'){
                        $rq_kd = urldecode(iconv($output['ie'],'utf-8',$output['query']));
                    }else{
                        $rq_kd = urldecode($output['query']);
                    }
                }
            }elseif('www.so.com' == $rq_su){
                if(isset($output['q']) && isset($output['ie'])){
                    if($output['ie'] != 'utf-8'){
                        $rq_kd = urldecode(iconv($output['ie'],'utf-8',$output['q']));
                    }else{
                        $rq_kd = urldecode($output['q']);
                    }
                }
            }elseif(preg_match('/m\d{1,2}\.baidu\.com/',$rq_su)){
                if(isset($output['word'])){
                    $rq_kd = urldecode($output['word']);
                }
            }
            if(!$rq_kd){
                $rq_kd = 0;
                $rq_basekd = 0;
            }else{
                $rq_basekd = $rq_kd;
                $rq_kd = base64_encode($rq_kd);
            }
        }
    }
} function get_request_time(){
    global $rq_tm;
    if(isset($_SERVER['REQUEST_TIME'])){
        $rq_tm =  $_SERVER['REQUEST_TIME'];
    }else{
        $rq_tm = time();
    }
} function get_request_ip(){
    global $rq_ip;
    if (getenv("HTTP_CLIENT_IP")){
        $rq_ip = getenv("HTTP_CLIENT_IP");
    } else if(getenv("HTTP_X_FORWARDED_FOR")){
        $rq_ip = getenv("HTTP_X_FORWARDED_FOR");
    } else if(getenv("REMOTE_ADDR")){    
        $rq_ip = getenv("REMOTE_ADDR");    
    }else {
        $rq_ip = "Unknow";
    }
}

PHP实现站点pv,uv统计(二)的更多相关文章

  1. [svc][op]从历险压缩日志里网站pv uv统计

    http://myhoop.blog.51cto.com/5556534/1367523 tomcat日志格式: http://www.cnblogs.com/anic/archive/2012/12 ...

  2. SHELL pv uv 统计事例

    #!/bin/sh #statistics newplive logs SOURCELOGS=$ ];then echo echo "please input file!" ech ...

  3. PHP实现站点pv,uv统计(三)

    数据分析脚本如下: //error_reporting(0);date_default_timezone_set("PRC");$environment = get_cfg_var ...

  4. PHP实现站点pv,uv统计(一)

    具体步骤分为数据采集脚本,数据收取服务,数据分析脚本,数据存储服务 采集脚本一般有两种形式,一种是简单的页面插入一个图片进行请求,一种是复杂的动态生成js标签,引入一段js(这时采集服务器会网往客户端 ...

  5. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

  6. 日志分析_统计每日各时段的的PV,UV

    第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...

  7. 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示

    最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,typ ...

  8. PV,UV,IP

    参加了DTCC归来之后,各大电商技术大牛都会自豪的分享一下自己公司网站的PV,流量等等.当时也是一知半解,回来之后赶紧查了查,也算是扫扫盲. 以下摘自网络中,自己稍稍做了整理,对于PV,流量和带宽的理 ...

  9. 网站流量分析指标-PV/UV/PR/ip分析及区别

    1.什么是pv? PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你 ...

  10. 网站流量分析指标-PV/UV/PR/IP

    网站数据分析,经常会统计一个页面或者一个网站或者其他情况的PV/UV.下面简单说一下,这些量PV/UV/PR/IP. 1.PV PV(page view),即页面浏览量,或点击量.通常是衡量一个网络新 ...

随机推荐

  1. c#百分比

    <div class="inner" style="width:@string.Format("{0:P1}", item.Maturitys) ...

  2. Gradle Goodness: Rename Ant Task Names When Importing Ant Build File

    Migrating from Ant to Gradle is very easy with the importBuild method from AntBuilder. We only have ...

  3. Android NDK引用预编译的动态链接库

    NDK里有个例子: android-ndk-r10/samples/module-exports/jni一看就懂了 ———————————————————————————– 从r5版本开始,就支持预编 ...

  4. lintcode:Ugly Number I

    Ugly Number Write a program to check whether a given number is an ugly number`. Ugly numbers are pos ...

  5. JSTL Tag学习笔记之<fn: />

    在JSTL中也提供了一些标准的函数,但是几乎都是和操作字符串相关的函数,如果需要使用这类函数的话,应该引入下面的taglib: <%@ taglib prefix="fn" ...

  6. web.xml配置bug之提示The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,

    错误:配置web.xml时,出现红色叉叉,提示 The content of element type "web-app" must match "(icon?,disp ...

  7. 【原创】Eclipse中为SVN设置快捷键

            SVN是深受开发者喜爱的版本控制工具,其较CVS有更好的控制策略.在Android开发中,我也选择SVN作为版本控制工具.Eclipse的SVN插件名叫Subclipse,可以到htt ...

  8. iOS:弹出窗控制器:UIPopoverController

    弹出窗控制器:UIPopoverController 截图:   实质:就是将内容控制器包装成popoverController的形式,然后在模态出来,必须给定指向目标(target.frame). ...

  9. babel安装

    大家都知道目前ES6不是浏览器全部都是支持的,所以要通过转码器先进行转码然后再编译代码.小心在学习ES6之前先安装了babel转码器,虽然当时安装的时候困难重重,遗憾的是没有把解决方案总结一下,别人询 ...

  10. 脉络清晰的BP神经网络讲解,赞

    学习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中,学习算法的研究有着十分重要的地位.目前,人们所提出的神经网络模型都是和学习算 法相应的.所以,有时人们并不去祈求对模型和算法进行严格 ...