侧边栏壁纸
博主头像
微笑涛声

一个在编程学习中逐渐变强的孩子! 热爱编程,喜欢软件开发!

  • 累计撰写 131 篇文章
  • 累计创建 63 个标签
  • 累计收到 7 条评论
隐藏侧边栏

PHP+MySQL实现精确统计网站访问量(IP个数)

微笑涛声
2020-02-18 / 0 评论 / 0 点赞 / 447 阅读 / 1,035 字
温馨提示:
本文最后更新于 2022-09-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

   基于WordPress的网站有很多统计功能。但是只能统计文章阅读数。不能统计访客人数。以下代码可以实现获取来访用户的IP地址,一个IP对应一次访问。即使刷新也不会增加访问量。这个非常精确。

1、创建一个存储数据的表。进入MySQL后直接创建即可。

create table wp_jc_count(
    id int not null auto_increment primary key,
    ip varchar(20) not null,
    times int default 0
    );

2、创建一个php脚本。复制到需要显示的地方即可。注意:里面需要修改MySQL账户和密码

<?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']);
    }
        //获取网站来源
    public function getFromPage(){
        return $_SERVER['HTTP_REFERER'];
    }
}
    $visitor =new visitorInfo();
    //连接数据库
    $conn=mysqli_connect("localhost","user_naem","password","db_name");
    if($conn){
        //echo "成功"."<br>";
        //echo $_SERVER['REMOTE_ADDR']."<br>";
    }else{
        echo "失败\n";
        die(mysqli_connect_error());
    }
    //设置数据库编码方式
    mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
    //记录访客的ip地址
    $address=$visitor->getIp();
    //查询当前访客来访的次数的sql语句
    $sql="select times from wp_jc_count where ip='$address'";
    //查询结果存到$result变量
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    if(!$row=$result->fetch_row()){
       $sql="insert into wp_jc_count(ip, times) values('$address','1')";
    }else{
        $times=$row['0']+1;
        $sql="update wp_jc_count set times='$times' where ip ='$address'";
    }
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    //获取总的访问人数即数据表中所有ip的数量
    $sql="select count(ip) from wp_jc_count";
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    if($row=$result->fetch_row()){
        $num=$row[0];
    }
    echo "您是第".$num."位访客";
    mysqli_close($conn);
?>

3、我自己的博客做了一些优化。把代码放在了文本工具里面执行。如果你的文本工具不能执行代码。请移步:

▶ WordPress”文本工具”实现代码执行功能

我的博客代码:

 <?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']);
    }
        //获取网站来源
    public function getFromPage(){
        return $_SERVER['HTTP_REFERER'];
    }
}
    $visitor =new visitorInfo();
    //连接数据库
    $conn=mysqli_connect("localhost","user_naem","password","db_name");
    if($conn){
        //echo "成功"."<br>";
        //echo $_SERVER['REMOTE_ADDR']."<br>";
    }else{
        echo "失败\n";
        die(mysqli_connect_error());
    }
    //设置数据库编码方式
    mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
    //记录访客的ip地址
    $address=$visitor->getIp();
    //查询当前访客来访的次数的sql语句
    $sql="select times from wp_jc_count where ip='$address'";
    //查询结果存到$result变量
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    if(!$row=$result->fetch_row()){
       $sql="insert into wp_jc_count(ip, times) values('$address','1')";
    }else{
        $times=$row['0']+1;
        $sql="update wp_jc_count set times='$times' where ip ='$address'";
    }
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    //获取总的访问人数即数据表中所有ip的数量
    $sql="select count(ip) from wp_jc_count";
    $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
    if($row=$result->fetch_row()){
        $num=$row[0];
    }
    
    mysqli_close($conn);
?>

<table>
    <tr style="text-align:center;font-size:18px; font-family:黑体;">
    <td style="width:100%;text-align:center;">    博客总访问量:<a style="color:DodgerBlue;"><?php echo $num;?></a> 人(IP数量)</td>
    </tr>
 </table>

运行效果:

0

评论