广告投放

PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息

目录

    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量,以及更久的年月视图

    PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息

    PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息

    列表页面最终展示效果

    列表页面添加了拉黑和删除功能

    可以一键拉黑到PB自带的黑名单中,不过不会有状态显示,因为PB的黑名单没有使用列表循环,无法对应判断是否拉黑

    2020-03-22 12:15更新

    新增当日首次访问时间

    2020-03-22 17:15 更新

    新增一键拉黑一键取消拉黑

    PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息

    PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息


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

    如果有大神能完全整合到PB代码里,万分感谢,目前效果本人用已经满足了。


    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

    给TA打赏
    共{{data.count}}人
    人已打赏
    广告位招租919838898
    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索