目录
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代码里,万分感谢,目前效果本人用已经满足了。