PHP - 命中计数器文本文件重置

时间:2014-06-09 09:50:23

标签: php web refresh hitcounter

我的非独特点击计数器存在问题。

脚本如下:

$filename = 'counter.txt';
if (file_exists($filename)) {
    $current_value = file_get_contents($filename);
} else {
    $current_value = 0;
}
$current_value++;
file_put_contents($filename, $current_value);

当我经常刷新我的网站时(例如每秒10次甚至更快),文本文件中的值将重置为0.

是否有解决此问题的猜测?

2 个答案:

答案 0 :(得分:1)

这是维护计数器的一种非常糟糕的方法,但是您的问题可能是当您在站点上发出多个请求时,对file_exists()的一个调用是错误的,因为其中一个进程是删除并重新创建文件。

如果你想让它一直工作,你将不得不在读写之间锁定文件See flock on php manual

当然,如果没有文件锁定,当2个进程设法从文件中读取相同的值时,你也会得到不正确的计数。

锁定文件也可能会导致系统停机,因为有2个或更多进程排队访问该文件。

将计数器存储在数据库中可能更好一点,因为它们旨在应对这种快速访问并确保每个进程都正确排队和释放。

答案 1 :(得分:0)

如果你添加一个检查文件,如果file_get_contents没有返回false会有帮助吗?

$value = file_get_contents($filename);
if($value !== false)
{
    $current_value = $value
}