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

news/2024/7/7 10: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>

运行效果:


http://www.niftyadmin.cn/n/3649399.html

相关文章

JDBC连接sql server 2008数据库

public class TestJdbc {public static void main(String[] args) {// 定义需要的对象PreparedStatement ps null;Connection ct null;ResultSet rs null;try {// 初始化我们的对象// 1.加载驱动// Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"…

如何使用React-Lottie将动画添加到React应用

介绍 (Introduction) Adobe After Effects can be an intuitive way to generate web animations, but there has historically been problems converting these animations to web apps. It is usually necessary to use a third party program to import an animation from A…

Android系统常用隐藏命令大全

本文出自&#xff1a;http://androidkaifa.com/thread-1038-1-1.html android手机隐藏命令大全&#xff0c;用之前要考虑清楚尤其是涉及到格式化或者恢复出厂设置类的&#xff01; 注意&#xff1a;因Android版本较多&#xff0c;固有部分隐藏命令或不能使用&#xff08;笔者用…

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

WordPress自带有两个小工具可以执行代码功能。一个是自定义HTML小工具&#xff0c;不过只能运行HTML、CSS、JavaScript三种语言。文本小工具默认是不可以运行代码的。要实现这个功能&#xff0c;需要添加以下代码。 使用方法&#xff1a;在当前主题目录下面的functions.php里面…

[LCS]启用WindowsMessenger5.0的调试日志功能来诊断登录LCS服务器

编写者&#xff1a;郑昀UltraPower摘要&#xff1a;Windows Messenger 5.0有一个注册表项设置&#xff0c;可以用来启用日志文件&#xff0c;该文件中记录了Windows Messenger 5.0登录LCS Server的详细来往包&#xff0c;可从其中得到通讯细节&#xff0c;从而作troubleshootin…

解决GridView与scrollview嵌套时GridView显示一行数据

重写GridView的onMeasure的方法: public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, Attri…

如何通过npm和package.json使用Node.js模块

The author selected the Open Internet/Free Speech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“ 开放互联网/言论自由基金会”作为“ Write for DOnations”计划的一部分来接受捐赠。 介绍 (Introduction) Because of such featu…

Android系统获取手机型号和系统版本号,以及其他配置信息

<pre name"code" class"java">String sdkandroid.os.Build.VERSION.SDK; // SDK号 String modelandroid.os.Build.MODEL; // 手机型号 String releaseandroid.os.Build.VERSION.RELEASE; // android系统版本号执行以下代码前&#xff0c;须在manifes…