使用纯文本文件存储(最简单、无需数据库)

这种方法非常适合小型网站或个人博客,它不需要数据库,只需要一个文本文件来存储访问次数。

php 统计网页访问量代码
(图片来源网络,侵删)

原理:

  1. 创建一个文本文件(counter.txt)来存储访问次数。
  2. 每当有用户访问页面时,PHP 脚本会读取这个文件中的数字。
  3. 将数字加 1。
  4. 将新数字写回文件中。

代码实现:

  1. 创建一个计数器文件: 在您的网站根目录下创建一个名为 counter.txt 的文件,并在里面输入一个初始数字,0

    counter.txt
    ---
    0
  2. 创建 PHP 访问统计页面(index.php):

    php 统计网页访问量代码
    (图片来源网络,侵删)
    <?php
    // 定义计数器文件的路径
    $file = 'counter.txt';
    // 检查文件是否存在并可读
    if (file_exists($file) && is_readable($file)) {
        // 读取当前访问次数
        $current_count = (int)file_get_contents($file);
        // 访问次数加 1
        $new_count = $current_count + 1;
        // 将新的访问次数写回文件
        // 使用 LOCK_EX 锁定文件,防止在写入过程中其他请求同时修改
        file_put_contents($file, $new_count, LOCK_EX);
        // 显示访问次数
        echo "您是第 <strong>" . htmlspecialchars($new_count) . "</strong> 位访客";
    } else {
        // 如果文件不存在或无法读取,显示错误信息
        echo "无法统计访问次数,请检查 counter.txt 文件是否存在且可写。";
    }
    ?>

优缺点:

  • 优点: 极其简单,无需数据库。
  • 缺点:
    • 不精确: 在高并发访问下,多个请求可能同时读取文件,导致统计结果不准确(这个问题可以通过 LOCK_EX 部分缓解,但不能完全根除)。
    • 安全性: counter.txt 的权限设置不当,可能会被恶意篡改。
    • 性能: 每次访问都需要进行文件读写操作,对于高流量网站可能成为性能瓶颈。

使用 MySQL 数据库(最常用、最可靠)

这是专业网站最常用的方法,它更可靠、更安全,并且可以轻松扩展,比如按日期、按页面等维度进行统计。

原理:

  1. 在 MySQL 数据库中创建一个表来存储访问数据。
  2. 当用户访问页面时,PHP 连接数据库,查询该页面的访问次数。
  3. 将访问次数加 1,并更新回数据库。

代码实现:

php 统计网页访问量代码
(图片来源网络,侵删)
  1. 创建数据库和表: 您需要有一个 MySQL 数据库,然后执行以下 SQL 语句来创建一个统计表。

    CREATE TABLE `page_views` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `page_url` varchar(255) NOT NULL COMMENT '页面URL',
      `view_count` int(11) NOT NULL DEFAULT '0' COMMENT '访问次数',
      `last_viewed` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '最后访问时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `url_unique` (`page_url`) -- 确保每个URL只记录一次
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2. 创建 PHP 统计代码(db_counter.php): 这是一个可复用的代码片段,您可以在任何需要统计的页面顶部引入它。

    <?php
    // --- 数据库配置 ---
    $db_host = 'localhost'; // 数据库主机
    $db_user = 'root';      // 数据库用户名
    $db_pass = '';          // 数据库密码
    $db_name = 'your_database'; // 数据库名
    // 获取当前页面的URL,作为统计的唯一标识
    // 使用 basename 只统计页面本身,不统计URL参数
    $page_url = basename($_SERVER['PHP_SELF']);
    // 创建数据库连接
    $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
    // 检查连接是否成功
    if ($conn->connect_error) {
        die("数据库连接失败: " . $conn->connect_error);
    }
    // 设置字符集
    $conn->set_charset("utf8mb4");
    // 使用预处理语句来防止SQL注入,这是非常重要的安全措施!
    // 1. 检查该页面是否已在表中存在
    $check_sql = "SELECT view_count FROM page_views WHERE page_url = ?";
    $stmt = $conn->prepare($check_sql);
    $stmt->bind_param("s", $page_url);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($result->num_rows > 0) {
        // 如果页面已存在,则更新访问次数
        $row = $result->fetch_assoc();
        $new_count = $row['view_count'] + 1;
        $update_sql = "UPDATE page_views SET view_count = ?, last_viewed = CURRENT_TIMESTAMP() WHERE page_url = ?";
        $update_stmt = $conn->prepare($update_sql);
        $update_stmt->bind_param("is", $new_count, $page_url);
        $update_stmt->execute();
    } else {
        // 如果页面不存在,则插入一条新记录
        $initial_count = 1;
        $insert_sql = "INSERT INTO page_views (page_url, view_count) VALUES (?, ?)";
        $insert_stmt = $conn->prepare($insert_sql);
        $insert_stmt->bind_param("si", $page_url, $initial_count);
        $insert_stmt->execute();
    }
    // 关闭连接
    $stmt->close();
    $update_stmt->close();
    $insert_stmt->close();
    $conn->close();
    // --- 在这里您可以显示访问次数 ---
    // 您可以在页面的某个位置显示 "本页已被访问 X 次"
    // 您需要再次查询数据库来获取当前页面的访问次数以显示
    // 为了方便,您可以将上面的查询逻辑封装成一个函数
    ?>
  3. 如何在页面中使用并显示访问次数: 在您的 index.php 或其他页面中,引入上面的 db_counter.php,然后执行一次查询来获取并显示访问次数。

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>我的首页</title>
    </head>
    <body>
        <h1>欢迎来到我的网站</h1>
        <?php
        // 1. 引入计数器逻辑(这会更新数据库中的计数)
        require_once 'db_counter.php';
        // 2. 连接数据库并查询当前页面的访问次数以显示
        // (注意:为了避免重复连接,可以将查询逻辑也放到 db_counter.php 中并返回结果)
        $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
        $conn->set_charset("utf8mb4");
        $page_url = basename($_SERVER['PHP_SELF']);
        $display_sql = "SELECT view_count FROM page_views WHERE page_url = ?";
        $stmt = $conn->prepare($display_sql);
        $stmt->bind_param("s", $page_url);
        $stmt->execute();
        $display_result = $stmt->get_result();
        $row = $display_result->fetch_assoc();
        $view_count = $row['view_count'];
        $stmt->close();
        $conn->close();
        ?>
        <p>本页已被访问 <strong><?php echo $view_count; ?></strong> 次。</p>
    </body>
    </html>

优缺点:

  • 优点:
    • 精确可靠: 数据库事务可以确保并发访问时数据的一致性。
    • 安全: 使用预处理语句有效防止 SQL 注入。
    • 功能强大: 可以轻松进行复杂查询,如统计总访问量、按日期统计、按页面统计等。
  • 缺点:
    • 需要数据库: 需要配置和维护 MySQL 数据库。

使用 PHP Session(统计独立访客)

如果您想统计的是“独立访客”(UV - Unique Visitor)而不是“页面访问量”(PV - Page View),可以使用 Session。

原理:

  1. 当用户第一次访问网站时,PHP 会创建一个 Session。
  2. 在 Session 中设置一个标志($_SESSION['visited'] = true)。
  3. 在页面中,检查这个标志是否存在,如果不存在,说明是新访客,则增加访客计数器,然后设置标志。

代码实现:

<?php
// 启动 Session
session_start();
// 定义计数器文件
$counter_file = 'unique_visitors.txt';
// 检查 Session 中是否有访问标记
if (!isset($_SESSION['visited'])) {
    // 如果没有,说明是新访客
    if (file_exists($counter_file) && is_readable($counter_file)) {
        $current_count = (int)file_get_contents($counter_file);
        $new_count = $current_count + 1;
        file_put_contents($counter_file, $new_count, LOCK_EX);
    } else {
        // 如果文件不存在,则创建并写入 1
        file_put_contents($counter_file, 1, LOCK_EX);
    }
    // 设置 Session 标记,防止同一会话内重复计数
    $_SESSION['visited'] = true;
}
// 读取并显示独立访客总数
if (file_exists($counter_file)) {
    $total_visitors = file_get_contents($counter_file);
    echo "独立访客总数: <strong>" . htmlspecialchars($total_visitors) . "</strong>";
} else {
    echo "无法读取访客数据。";
}
?>

注意:

  • 这种方法统计的是“浏览器会话”级别的独立访客,如果用户关闭浏览器再打开,Session 会被销毁,他/她会被算作一个新的访客。
  • 对于更精确的独立访客统计(例如基于 IP 地址或登录用户),仍然推荐使用数据库。

总结与建议

方法 适用场景 优点 缺点
文本文件 个人博客、小型项目、快速实现 简单、无需数据库 不精确、不安全、性能差
MySQL 数据库 绝大多数网站、专业项目 精确、可靠、安全、功能强大 需要配置和维护数据库
PHP Session 统计当前会话的独立访客 实现简单,避免重复计数 不算真正的独立访客,依赖浏览器

给您的建议:

  • 如果您是初学者或做一个简单的个人网站,可以从方法一(文本文件)开始,了解基本原理。
  • 对于任何正式的、有流量预期的网站,强烈推荐使用方法二(MySQL 数据库),它是最专业、最可靠的解决方案。
  • 如果您需要区分独立访客和页面访问量,可以将方法二和方法三结合使用,分别创建 page_views(PV)和 unique_visitors(UV)两张表。