一个简单的点击计数器

问题描述 投票:0回答:1

我的网站有一个简单的点击计数器,如下所示:

if(file_exists($statfile))
    $count=file_get_contents($statfile)+1;
file_put_contents($statfile, $count, LOCK_EX);

统计文件是一个简单的文本文件,不包含该子页面的点击计数的其他内容。当收到它的点击时,我们读取文件的内容,增加数字,然后写回。

没关系,只是我会随机地重新开始计数。我不知道为什么。我希望 LOCK_EX 能解决这个问题,但没有;它重新启动了。

我之前的解决方案是将所有计数器作为序列化数组保存在同一个文件中,但该文件经常损坏。然而,它并不大,目前只有 55 个号码。

我做错了什么?

我不知道该尝试什么。每一天的计数器都在 20K 以上,但第二天我看到了几百个。注意。数据库不是一个选项。

php
1个回答
0
投票

数据库是最好的选择,另一种解决方案是在文件开头使用

session_start()
(启动会话)

然后要计算点击量,您可以通过读取所有会话来执行此操作,如果您想重置点击计数器,只需清除活动会话即可

<?php

// Start the session
session_start();

// Set session expiration to a very large value (e.g., 10 years)
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 365 * 10);

// Disable garbage collection for sessions
ini_set('session.gc_probability', 0);
ini_set('session.gc_divisor', 1);

// Function to count active sessions
function countActiveSessions() {
    $activeSessions = 0;
    // Loop through all active sessions
    foreach (scandir(session_save_path()) as $file) {
        if ($file !== '.' && $file !== '..') {
            $sessionFilePath = session_save_path() . '/' . $file;

            // Check if the session is still active
            if (session_status() === PHP_SESSION_ACTIVE && file_exists($sessionFilePath)) {
                $activeSessions++;
            }
        }
    }

    return $activeSessions;
}

$activeSessionsCount = countActiveSessions();
echo "Total number of hits: $activeSessionsCount";

?>

这是针对

get_file_contents
约束和问题的解决方案,数据库可以解决这些问题。

另一种选择是只计算请求该站点的日志数量。

© www.soinside.com 2019 - 2024. All rights reserved.