我使用的是以下基本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。
我被告知修复此问题是使用文件锁定,因此我更改为以下代码:
<?php
$dat = file_get_contents('count_file.txt');
$fil = fopen('count_file.txt', 'w');
if (flock($fil, LOCK_EX)) {
echo $dat+1;
fwrite($fil, $dat+1);
flock($fil, LOCK_UN);
}
fclose($fil);
?>
现在几天后它再次从5000以上下降到13.任何人都知道为什么?
答案 0 :(得分:1)
你fopen()写入文件,截断文件。如果你无法获得锁定,则关闭可能被截断的文件,然后关闭零字节。
答案 1 :(得分:0)
使用fopen“a”而不是fopen“w”然后截断文件:
<?php
$dat = file_get_contents('count_file.txt');
$fil = fopen('count_file.txt', 'a');
if (flock($fil, LOCK_EX)) {
ftruncate($fil,0);
echo $dat+1;
fwrite($fil, $dat+1);
flock($fil, LOCK_UN);
}
fclose($fil);
?>