紫影基地

 找回密码
 立即注册
查看: 266|回复: 0

[PHP学习] 自己动手实现PHP+MySQL精确统计网站访问量(IP数量)

[复制链接]
阅读字号:

2001

主题

2116

帖子

21万

积分

超级版主

Rank: 8Rank: 8

积分
210090
发表于 2022-11-1 06:36:57 | 显示全部楼层 |阅读模式

我们做网站的朋友基本都是有用过统计代码的,比如百度统计,CNZZ,51la等等,在WordPress程序中也有很多统计功能插件,但是只能统计文章阅读数而无法统计访客人数。下面教大家一个自己动手实现PHP+MySQL精确统计网站访问量(IP数量)的方法。
自己动手实现PHP+MySQL精确统计网站访问量(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);
?>
把代码放在了文本工具里面执行查看是否可以正常运行。

WordPress自带有两个小工具可以执行代码功能。一个是自定义HTML小工具,不过只能运行HTML、CSS、JavaScript三种语言。文本小工具默认是不可以运行代码的。要实现这个功能,需要添加以下代码。

使用方法:在当前主题目录下面的functions.php里面加入以下代码,注意,如果现在有使用文本工具请删除,添加完代码再使用工具。否则代码不起作用.

add_filter('widget_text', 'php_text', 99);
function php_text($text) {
if (strpos($text, '<' . '?') !== false) {
ob_start();
eval('?' . '>' . $text);
$text = ob_get_contents();
ob_end_clean();
}
return $text;
}
添加完代码以后,可以去测试文本工具,发现已经可以运行PHP代码了。

全部代码展示:

<?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="colorodgerBlue;"><?php echo $num;?></a> 人(IP数量)</td>
    </tr>
</table>
以下代码可以实现获取来访用户的IP地址,一个IP对应一次访问。即使刷新也不会增加访问量。这个非常精确。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 09:36 , Processed in 0.085582 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表