目录
PbootCMS二开实现后台统计访问量(一)数据统计
通过php+mysql实现统计网站访问量,IP/系统/浏览器/来源等信息
统计数据包括:
访客IP
访客系统
访客浏览器
访客入口页面
访客当日首次访问时间
访客当日最后访问时间
访客访问的页面总数(统计的是该IP所有天数的总浏览页数)
环境:centos6.9+;mysql5.1;php7.2
V1.02
新增 一键拉黑和一键取消拉黑功能
通过PB自带的黑名单文本框进行操作
操作成功可实时看到最终效果
V1.01
新增 echarts图表显示
支持显示年视图和周视图
周视图可以看到最近一周每天的变化趋势(每个IP每天一次)
V1.00
实现用户浏览页面写入各种数据到mysql数据库
统计用户浏览的页面总数
一、创建一个存储数据的表
create table pb_tongji( id int not null auto_increment primary key, ip varchar(20) not null, times int default 0, os varchar(50) not null, br varchar(50) not null, url varchar(200) not null, `create_time` varchar(200) not null, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' );
二、创建一个php脚本
2020-03-22 12:25修改
调整为每个IP每天新增一行数据
浏览页数统计的是该IP所有天数的合计浏览页面数量
<?php
class visitorInfo
{
//获取访客ip
public function getIp()
{
$ip=false;
if(!empty($_SERVER"HTTP_CLIENT_IP")){
$ip = $_SERVER"HTTP_CLIENT_IP";
}
if (!empty($_SERVER'HTTP_X_FORWARDED_FOR')) {
$ips = explode (", ", $_SERVER'HTTP_X_FORWARDED_FOR');
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips$i)) {
$ip = $ips$i;
break;
}
}
}
return ($ip ? $ip : $_SERVER'REMOTE_ADDR');
}
//根据ip获取城市、网络运营商等信息
public function findCityByIp($ip){
$data = file_get_contents('http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);
return json_decode($data,$assoc=true);
}
//获取网站来源
public function getFromPage(){
if(isset($_SERVER'HTTP_REFERER'))
return $_SERVER'HTTP_REFERER';
else if(strpos($_SERVER'QUERY_STRING', '?'))
return 'http://'.$_SERVER'HTTP_HOST'.$_SERVER'PHP_SELF'.'?'.$_SERVER'QUERY_STRING';
else
return 'http://'.$_SERVER'HTTP_HOST'.$_SERVER'REQUEST_URI';
}
//获取访客电脑系统
public function GetOs() {
if (!empty($_SERVER'HTTP_USER_AGENT')) {
$OS = $_SERVER'HTTP_USER_AGENT';
if (preg_match('/win/i', $OS)) {
$OS = 'Windows';
} elseif (preg_match('/mac/i', $OS)) {
$OS = 'MAC';
} elseif (preg_match('/linux/i', $OS)) {
$OS = 'Linux';
} elseif (preg_match('/unix/i', $OS)) {
$OS = 'Unix';
} elseif (preg_match('/bsd/i', $OS)) {
$OS = 'BSD';
} else {
$OS = 'Other';
}
return $OS;
} else {
return "获取访客操作系统信息失败!";
}
}
//获取访客浏览器
public function GetBrowser() {
if (!empty($_SERVER'HTTP_USER_AGENT')) {
$br = $_SERVER'HTTP_USER_AGENT';
if (preg_match('/MSIE/i', $br)) {
$br = 'MSIE';
} elseif (preg_match('/Firefox/i', $br)) {
$br = 'Firefox';
} elseif (preg_match('/Chrome/i', $br)) {
$br = 'Chrome';
} elseif (preg_match('/Safari/i', $br)) {
$br = 'Safari';
} elseif (preg_match('/Opera/i', $br)) {
$br = 'Opera';
} else {
$br = 'Other';
}
return $br;
} else {
return "获取浏览器信息失败!";
}
}
}
$visitor =new visitorInfo();
//连接数据库
$conn=mysqli_connect("localhost","tongji","123456","tongji");
if($conn){
// echo "成功"."<br>";
//echo $_SERVER'REMOTE_ADDR'."<br>";
} else {
echo "失败
";
die(mysqli_connect_error());
}
//设置数据库编码方式
mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
//记录访客的ip地址
$address=$visitor->getIp();
//记录访客的访问页面
$url=$visitor->getFromPage();
//记录访客的操作系统
$os=$visitor->GetOs();
//记录访客的浏览器类型
$br=$visitor->GetBrowser();
//查询当前访客来访的次数的sql语句
$sql="select times,os,br,url,DATE_FORMAT(create_time,'%m/%d/%Y'),DATE_FORMAT(update_time,'%m/%d/%Y') from pb_tongji where ip='$address' order by create_time desc";
//查询结果存到$result变量
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if(!$row=$result->fetch_row()){
$sql="insert into pb_tongji(ip, times, os, br ,url ,create_time) values('$address','1','$os','$br','$url','$create')";
} elseif($row'4'!=$row'5') {
$sql="insert into pb_tongji(ip, times, os, br ,url ,create_time) values('$address','1','$os','$br','$url','$create')";
} else {
$times=$row'0'+1;
$sql="update pb_tongji set times='$times' where ip ='$address' order by create_time desc";
}
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
//获取总的访问IP人数即数据表中所有ip的数量
$sql="select count(ip) from pb_tongji";
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if($row=$result->fetch_row()){
$num=$row0;
}
// echo "访问IP".$address;
// echo "访问页面".$url;
// echo "访问系统".$os;
// echo "访问浏览器".$br;
echo "您是第".$num."位访客";
mysqli_close($conn);
?>
三、通过js引入php脚本
<script src="/libs/js/tongji.php"></script>
四:后台完全适配PbootCMS还未完善好,正在努力中。。。
目前已经实现了列表显示访客,以及一键添加IP到拉黑名单中
后台首页的年视图和周视图统计展示效果,显示最近一周每天的访问IP量,以及更久的年月视图


列表页面最终展示效果
列表页面添加了拉黑和删除功能
可以一键拉黑到PB自带的黑名单中,不过不会有状态显示,因为PB的黑名单没有使用列表循环,无法对应判断是否拉黑
2020-03-22 12:15更新
新增当日首次访问时间
2020-03-22 17:15 更新
新增一键拉黑和一键取消拉黑


有人问我如何整合到PB,后面会出文章专门写如何在后台页面显示,不过我并没有使用到PB的任何代码,所以其实只能叫做放进后台页面里而已,从连接数据库到显示都是通过页面里的PHP完成,不经过PB的代码。
如果有大神能完全整合到PB代码里,万分感谢,目前效果本人用已经满足了。























