点击计数器随机重置/下降非常低

时间:2012-07-12 12:19:30

标签: php counter

我正在使用以下基本PHP:

<?php

    if (file_exists('count_file.txt')) 
    {
        $fil = fopen('count_file.txt', r);
        $dat = fread($fil, filesize('count_file.txt')); 
        echo $dat+1;
        fclose($fil);
        $fil = fopen('count_file.txt', w);
        fwrite($fil, $dat+1);
    }

    else
    {
        $fil = fopen('count_file.txt', w);
        fwrite($fil, 1);
        echo '1';
        fclose($fil);
    }
?>

作为一个打击计数器(我宁愿没有一个,但我们一直坚持)。 txt文件保持点击的计数,它的工作原理......然而,计数器随机(有时几个星期后,有时几个月后)决定绊倒并从4300降至11.有人可以告诉我如何纠正这个它变得烦人了吗?

2 个答案:

答案 0 :(得分:1)

您没有使用任何锁定。如果两个或多个请求同时到达您的服务器,他们将会踩踏彼此的文件操作。这种事情在数据库中做得更好。

答案 1 :(得分:1)

filesize函数告诉您文件中的字节数。 PHP.net可以描述该功能如何对您有用。您应该从文件中读取一行(fgets)而不是使用该函数(该行应该有命中计数),然后在命中计数中加一,然后重新保存。

让我给你一个类比。你在厨房,你拉出一个蓝莓容器,你想知道有多少蓝莓,但你要问容器多少英寸长。然后你摆脱所有的蓝莓,并在容器中放入英寸+ 1蓝莓的数量。没有什么是有意义的,但这就是你的脚本所做的。如果更改行:$ dat = fread($ fil,filesize('count_file.txt')); TO $ dat = fgets($ fil);您应该阅读有多少蓝莓,在该数字中添加一个并重新保存。