我想用文件的方式实现一个计数器,就是刷新一次计数器就加一,要求是在高并发的情况下保证绝对不出错(超时除外)。我的思路是,首先打开文件,然后加锁,然后读文件内容,加一,写回文件,解锁,关文件。但是代码却出现了一个问题:while(true)
{
sleep(1);
$fp = fopen('text.txt', "w+"); // 这里设置为 w+ 后面无法用 fread 读出数据,如果设置为 r+ 那么写的数据就不是加一了,而是在文件最开头前添加字符串了,闷。
if ($fp === false)
continue; if (@flock($fp, LOCK_EX))
{
$content = fread($fp, 512); 
$content = (int)$content + 1; echo $content; fwrite($fp, $content);
flock($fp, LOCK_UN);
fclose($fp); break;
}
}