我使用的是以下基本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文件记录命中次数,它随机地works...however计数器(有时是几周后,有时是几个月后),决定出错并从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。有人知道为什么吗?
发布于 2012-07-18 16:50:30
fopen()要写入的文件,它会截断该文件。如果您无法获得锁,则关闭文件,该文件可能会被截断,然后被截断为零字节。
发布于 2013-04-21 19:04:59
使用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);
?> https://stackoverflow.com/questions/11537508
复制相似问题