我正在使用以下代码:
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
答案 0 :(得分:1)
好吧,是吗?长度参数必须大于0
如果filesize失败,则返回false。 False被评估为0.
如果此时无法读取文件,filesize可能会失败。我想如果你有两个同时点击可能会发生。其中一个是写文件而另一个尝试读取它。 另一种可能性是文件大小可以被读取,但它是0,因为另一个访问者打开了文件,但还没有写入新值。
因此,要解决此问题,您应该对文件应用锁定,更好地处理和检查这些函数的结果代码,或者更好:将存储移动到数据库。