【问题标题】:Basic PHP hit counter loses hits every so often?基本的 PHP 命中计数器每隔一段时间就会丢失命中?
【发布时间】:2011-12-19 09:44:24
【问题描述】:

我正在使用以下代码:

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

【问题讨论】:

标签: php counter hit


【解决方案1】:

长度参数必须大于0

嗯,是吗?

如果文件大小失败,则返回 false。 False 被评估为 0。

如果此时无法读取文件,文件大小可能会失败。我认为如果您同时获得两个命中,则可能会发生这种情况。其中一个正在写入文件,而另一个尝试读取它。 另一种可能是文件大小可以被读取,但它为0,因为另一个访问者打开了文件,但还没有写入新值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2012-03-02
    • 2023-04-03
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多