PbootCMS二开实现统计网站访问量(一)IP/系统/浏览器/来源等信息
舒彬琪 PbootCMS 2020-03-21 16:52:24 1041 浏览

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

image.png

image.png

列表页面最终展示效果

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

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

2020-03-22 12:15更新

新增当日首次访问时间

2020-03-22 17:15 更新

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

image.png

image.png


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

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

继续浏览有关 PbootCMS php PB二开浏览统计 的文章
发表评论
评论列表
本站使用PbootCMS自带留言实现单文章留言!
分享按钮
附件已下载在这里

附件下载成功

详情请到您的下载文件夹中查看

下载更多资源

PB教程

PB二开

搜索

赞赏

加入Q群