基于php写的一个网页流量统计代码

基于php写的一个网页流量统计代码

你的糖来啦
2023-04-03 / 3 评论 / 74 阅读 / 正在检测是否收录...

最近没什么事做想到给博客添加一个流量统计模块,网络找了一圈没有找到心仪的,于是就自己写了一个,也就有了这篇文章。
废话不多说,直接上源码:


效果演示
效果图
以下是代码展示:index.php

<?php
//引入数据库
include("db.php");
//获取当前访问用户的IP地址
$ip = $_SERVER["REMOTE_ADDR"];
$fwcs = "";
$zrfwcs ="";
//判断同一个IP在15分钟内时候访问过,有不计入次数
//查询表
$sql = "SELECT * FROM `statuser` WHERE `IP` = '" . $ip . "'";
$result = mysqli_query($db, $sql);
if (mysqli_num_rows($result) > 0) {
    // 指定时间
    $targetTime = "";
    $id = "";
    // 查询有结果 判断15分钟内是否有过访问 没有继续添加
    while ($row = $result->fetch_assoc()) {
        // 指定时间
        $targetTime = $row["time"];
        $id = $row["id"];
    }
// 将指定时间转换为时间戳
    $targetTimestamp = strtotime($targetTime);
// 获取当前时间戳
    $currentTimestamp = time();
// 计算两个时间戳之间的差值
    $timeDiff = $currentTimestamp - $targetTimestamp;

// 判断差值是否超过15分钟(900秒)
    if ($timeDiff > 900) {
        @$sql = "UPDATE `statuser` SET `time` = " . CURRENT_TIMESTAMP . " WHERE `statuser`.`id` = '" . $id . "'";
        // 执行查询并获取结果
        if ($db->query($sql) === TRUE) {
        } else {
            echo "SQL 语句执行失败: " . $db->error;
        }
        //添加访问次数
        //先查询现有然后再现有的基础上加一
        $sql = "SELECT * FROM `statnum` WHERE `id` = 1";
        $result = mysqli_query($db, $sql);
        if (mysqli_num_rows($result) > 0) {
            // 获取访问次数
            while ($row = $result->fetch_assoc()) {
                $fwcs = $row["fwcs"];
            }
            $sql = "UPDATE `statnum` SET `fwcs` = '" . ($fwcs + 1) . "' WHERE `statnum`.`id` = 1";
            if ($db->query($sql) === TRUE) {
            } else {
                echo "SQL 语句执行失败: " . $db->error;
            }
        } else {
            echo "没有找到相关数据";
        }
    }
} else {
    // 查询无结果 在数据库中添加
    $sql = "INSERT INTO `statuser` (`IP`, `time`) VALUES ('" . $ip . "', CURRENT_TIMESTAMP)";
    mysqli_query($db, $sql);
    $sql = "SELECT * FROM `statnum` WHERE `id` = 1";
    $result = mysqli_query($db, $sql);
    if (mysqli_num_rows($result) > 0) {
        // 获取访问次数
        $fwcs = "";
        while ($row = $result->fetch_assoc()) {
            // 指定时间
            $fwcs = $row["fwcs"];
        }
        echo $fwcs;
        $sql = "UPDATE `statnum` SET `fwcs` = '" . ($fwcs + 1) . "' WHERE `statnum`.`id` = 1";
        if ($db->query($sql) === TRUE) {
        } else {
            echo "SQL 语句执行失败: " . $db->error;
        }
    }
}
//告诉访问者他是第几个访问者
$sql = "SELECT * FROM `statnum` WHERE `id` = 1";
$result = mysqli_query($db, $sql);
if (mysqli_num_rows($result) > 0) {
    // 获取访问次数
    while ($row = $result->fetch_assoc()) {
        $fwcs = $row["fwcs"];
    }
} else {
    echo "没有找到相关数据";
}
//统计今日访问人数
// 获取当前年月日
$date = date('Ymd');

// 查询是否有名为$datastat的列,并且值等于当前年月日
$tableName = "datastat";
$columnName = "datastat";
$result = mysqli_query($db, "SELECT * FROM $tableName WHERE $columnName='$date'");
$datafwcs = "";
if (mysqli_num_rows($result) > 0) {
    //echo "列 $columnName 等于 $date 存在";
    //先查询现有然后再现有的基础上加一
    $sql = "SELECT * FROM $tableName WHERE `$columnName` = '$date'";
    $result = mysqli_query($db, $sql);
    if (mysqli_num_rows($result) > 0) {
        // 获取访问次数
        while ($row = $result->fetch_assoc()) {
            $datafwcs = $row["fwcs"];
        }
        $sql = "UPDATE `$tableName` SET `fwcs` = '" . ($datafwcs + 1) . "' WHERE `$columnName` = '$date'";
        if ($db->query($sql) === TRUE) {
        } else {
            echo "SQL 语句执行失败: " . $db->error;
        }
    } else {
        echo "没有找到相关数据";
    }
} else {
    // 插入名为$datastat的列,并设置值为当前年月日
    $sql = "INSERT INTO `datastat` (`datastat`, `fwcs`) VALUES ('20230403', '0')";
    if (mysqli_query($db, $sql)) {
        //echo "列 $columnName 值为 $date 插入成功";
    } else {
        echo "列 $columnName 值为 $date 插入失败:" . mysqli_error($db);
    }
}
//获取前一日浏览量
$date = date('Ymd') - 1;
$sql = "SELECT * FROM $tableName WHERE `$columnName` = '$date'";
$result = mysqli_query($db, $sql);
if (mysqli_num_rows($result) > 0) {
    // 获取访问次数
    while ($row = $result->fetch_assoc()) {
        $zrfwcs = $row["fwcs"];
    }
} else {
    echo "没有找到前一天的相关数据";
}
//打印数据
echo "<span>你的IP是:" .$ip. "</span>";
echo "<span style='margin-left: 0.5rem'>总访问次数:" . $fwcs . "</span>";
echo "<span style='margin-left: 0.5rem'>今日浏览量:" . ($datafwcs+1) . "</span>";
echo "<span style='margin-left: 0.5rem'>昨日浏览量:" . $zrfwcs . "</span>";
echo "<span style='margin-left: 0.5rem'>日差浏览量:" . ($datafwcs+1 - $zrfwcs) . "</span>";

// 关闭数据库连接
$db->close();




db.php:

<?php
$servername = 'localhost';
$username = 'webstat';
$password = 'webstat';
$dbname = 'webstat';
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die('数据库链接失败' . $conn->connect_error);
}
$db = $conn;
$cs = "<script>alert()</script>";

可以这样调用

<iframe src="统计链接即统计源码的访问地址" border="0" frameborder="no" marginwidth="0" marginheight="0" width=660 height=30"></iframe>

有能力可以自行二开

0

评论 (3)

取消
  1. 头像
    测试
    iPhone · Safari

    测试邮件通知

    回复
    1. 头像
      你的糖来啦 作者
      Windows 10 · Google Chrome
      @ 测试

      测试1

      回复
  2. 头像
    测试
    iPhone · Safari

    测试2

    回复