PHP实现站点pv,uv统计(二)
数据采集脚本如下:
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统计(二)的更多相关文章
- [svc][op]从历险压缩日志里网站pv uv统计
http://myhoop.blog.51cto.com/5556534/1367523 tomcat日志格式: http://www.cnblogs.com/anic/archive/2012/12 ...
- SHELL pv uv 统计事例
#!/bin/sh #statistics newplive logs SOURCELOGS=$ ];then echo echo "please input file!" ech ...
- PHP实现站点pv,uv统计(三)
数据分析脚本如下: //error_reporting(0);date_default_timezone_set("PRC");$environment = get_cfg_var ...
- PHP实现站点pv,uv统计(一)
具体步骤分为数据采集脚本,数据收取服务,数据分析脚本,数据存储服务 采集脚本一般有两种形式,一种是简单的页面插入一个图片进行请求,一种是复杂的动态生成js标签,引入一段js(这时采集服务器会网往客户端 ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- 日志分析_统计每日各时段的的PV,UV
第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...
- 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示
最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,typ ...
- PV,UV,IP
参加了DTCC归来之后,各大电商技术大牛都会自豪的分享一下自己公司网站的PV,流量等等.当时也是一知半解,回来之后赶紧查了查,也算是扫扫盲. 以下摘自网络中,自己稍稍做了整理,对于PV,流量和带宽的理 ...
- 网站流量分析指标-PV/UV/PR/ip分析及区别
1.什么是pv? PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你 ...
- 网站流量分析指标-PV/UV/PR/IP
网站数据分析,经常会统计一个页面或者一个网站或者其他情况的PV/UV.下面简单说一下,这些量PV/UV/PR/IP. 1.PV PV(page view),即页面浏览量,或点击量.通常是衡量一个网络新 ...
随机推荐
- Python并发与并行的新手指南
点这里 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程 ...
- Android的事件处理机制详解(二)-----基于监听的事件处理机制
基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...
- POJ 2533 Longest Ordered Subsequence
题目描述:LIS(Longest Increasing Subsequence)模板题 分析:O(n^2)的方法 状态表示:d[i]表示以i结尾的最长上升子序列长度 转移方程:d[i]=max{ 1, ...
- 2016PHP开发者大会
大会干货: Rasmus Lerdorf——<Speeding up the Web with PHP 7> PHP 7 is here. It brings drastic perfor ...
- web工程导入MyEclipse 就变成Java工程 ———— 解决方案
Web 工程 导入到 MyEclipse 中后就变成 Java工程了 折腾大大半天,最后才发现是 .settings 里面文件的配置问题.. .settings 文件夹里面的 org.eclipse. ...
- cocos2d-x3.0环境搭建(基于win7以及mac)
流程概览: Windows平台 一.安装 Python与配置Python环境变量 二.安装Cocos2d-x,并创建项目 Mac平台 安装Cocos2d-x,并创建项目 具体操作: 一.安装Pytho ...
- Shell练习 验证号码
原文: https://leetcode.com/problems/valid-phone-numbers/ Given a text file file.txt that contains list ...
- lintcode:二叉树的所有路径
二叉树的所有路径 给一棵二叉树,找出从根节点到叶子节点的所有路径. 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5" ...
- SpringMVC学习总结(七)——SpringMVC注解@..详解
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件@Service 声明Service组件 ...
- Android核心分析之十九电话系统之GSMCallTacker
GSMCallTracker在本质上是一个Handler.<IGNORE_JS_OP> 1.jpg (1.52 KB, 下载次数: 1) 下载附件 保存到相册 2012-3-22 11: ...