基本的PHP点击计数器经常失败?

时间:2011-12-19 09:44:24

标签: php counter hit

我正在使用以下代码:

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);
}

这种情况很好,但每隔3-4个星期就会说点击计数器会突然从1548降到53(只是一个例子而不是字面数字) - 任何人都有想法为什么会发生这种情况?

错误日志显示:

PHP Warning:  fread() [<a href='function.fread'>function.fread</a>]: Length parameter must be greater than 0 in /my/home/dir/www.mysite.com/count.php on line 6

1 个答案:

答案 0 :(得分:1)

  

长度参数必须大于0

好吧,是吗?

如果filesize失败,则返回false。 False被评估为0.

如果此时无法读取文件,

filesize可能会失败。我想如果你有两个同时点击可能会发生。其中一个是写文件而另一个尝试读取它。 另一种可能性是文件大小可以被读取,但它是0,因为另一个访问者打开了文件,但还没有写入新值。

因此,要解决此问题,您应该对文件应用锁定,更好地处理和检查这些函数的结果代码,或者更好:将存储移动到数据库。