php 如何在24小时后将访客计数器重置为零?

e0bqpujr  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(186)

我已经实现了一个SQL数据库来跟踪每天访问我的网站的人数。目的是在网站底部显示此访问者计数。然而,我面临着一个问题,即计数器在24小时后不会重置,并继续增加。
如果有人能帮我找出代码中的问题,我将不胜感激。
下面是我在php中执行计数的相关代码片段:
下面是PHP中的代码:

<?php

$mysqliCounter = new mysqli(
    "localhost","User","pass","website_db"
);

// Check connection
if ($mysqliCounter -> connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqliCounter -> connect_error;
    exit();
}

$mysqliCounter->query('INSERT INTO `views` (`id`, `time`) VALUES (NULL, CURRENT_TIMESTAMP)');

在代码之后,我实现了以下逻辑来执行计数:

Today Visitors:
<?php

echo $mysqliCounter->query(
    'SELECT * FROM views WHERE time > \''
    . date("Y-m-d H:i:s" , time() -86400) . "'")
           ->num_rows

?>
fhity93d

fhity93d1#

感谢@YourCommonSense提供更好的想法。
你必须首先将两个日期转换为char,并在where条件下进行比较,如下所示。

// Changing `SELECT *` to `SELECT COUNT(*)`, since we dont want any rows to be fetched.
// We need only the total number of rows present based on `where` condition.
// This will avoid unnecessary memory loads and query will executes faster, comparatively.
echo $mysqliCounter->query('SELECT COUNT(*) FROM views WHERE DATE(time) = CURDATE()')->fetch_row[0];

在上面的代码中,我们将timestamp转换为date,并将其与当前日期进行比较。
我们将根据当前日期获取所有选定行的计数。

  • 注意:当前日期将基于服务器的位置 *。
    建议的想法
  • (适用于小型应用程序/网站)*

而不是使用你的数据库,为什么你不使用文件系统,每天使用一个文件。
每次访视时创建/追加文件。

$oldCount = file_get_contents('hits'.date('Ymd')); // We dont need extn.
$newCount = (int)$oldCount++;
$f = fopen('hits'.date('Ymd'), 'w');
flock($f, LOCK_EX | LOCK_NB);
fwrite($f, $newCount);
flock($f, LOCK_UN);
fclose($f);

echo $newCount;

PHP的flock()函数会强制脚本按照queque系统写入同一个文件。filewriter将锁定文件并向其写入,然后解锁,下一个filewriter将跟随,依此类推。……

相关问题