数据采集脚本如下:

  1. 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();
  2.  
  3. //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:四级连接
  4.  
  5. $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
    );
  6.  
  7. //查找记录的目录路径
    $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;
  8.  
  9. //创建记录的目录文件夹
    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);
  10.  
  11. //做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;
  12.  
  13. 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;
    }
  14.  
  15. 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;
        }
    }
  16.  
  17. 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);
                }
            }
        }
    }
  18.  
  19. function get_request_time(){
        global $rq_tm;
        if(isset($_SERVER['REQUEST_TIME'])){
            $rq_tm =  $_SERVER['REQUEST_TIME'];
        }else{
            $rq_tm = time();
        }
    }
  20.  
  21. 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. LoaderManager使用详解(二)---了解LoaderManager

    了解LoaderManager   这篇文章将介绍LoaderManager类,这是该系列的第二篇文章. 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders 四:实 ...

  2. Activity学习(二)——生命周期

    一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...

  3. 无线Ad-hoc网络的关键技术之路由(转)

    无线Ad-hoc网络的关键技术之路由http://network.51cto.com/art/201003/189719.htm

  4. node-debug 三法三例之node debugger + node inspector

    大家对nodejs调试应该都比较头疼,至少我这个不用IDE写js的人很头疼这个,其实node的生态圈非常好 有非常好的工具和非常潮的开发方式 这里总结了3法3例,希望能对大家有所帮助 文档地址  ht ...

  5. jackson set properties to default value (取消让jackson 赋予默认值)

    you can define it with Integer rather than int or long. define it with a package type. jackson wont' ...

  6. Linux基础--用户和组管理

    1.账号管理相关文件 1)/etc/passwd    每一行都代表一个账号,有几行就代表有几个账号在你的系统中,不过需要特别留意的是,里头很多账号本来就是系统中必须要的,我们可以简称他为系统账号, ...

  7. 有直接运行的runas命令,XP就有

    net user administrator /active:yes runas /user:ComputerName\Administrator /savecred “C:\Path\To\Prog ...

  8. PHP如何提取img标签属性

    extract_attrib是一个提取的图像标签属性的PHP脚本函数,使用正则表达式方法提取. 当你想在HTML的img标签中提取图像数据,这非常有用. 如果你知道如何修改正则表达式,那么同样的功能进 ...

  9. 正确的理解this 和 super

    this和super是Java的两个关键字. 先明确一个问题,有人错误的认为它们是对象里的“属性”,这只能怪老师没有讲清楚计算机的本质了.因为计算机的处理器只能用指令去处理数据,像C语言之类的容易理解 ...

  10. C语言:几种字符输入函数的区别

    几种字符输入函数的区别: 1.getche()函数:用于从键盘读入一个字符并显示,然后直接执行下一条语   句. 2.getch()函数:用于从键盘中读入一个字符,但不显示在屏幕上,       然后 ...