我制作这个简单的计数器
$now = date ("d");
$filename = $now .".txt";
$lastcount="";
if (file_exists($filename))
{
if (time()-filemtime($filename) > 2 * 86400) {
} else {
$lastcount=strval(intval (file_get_contents($filename))+1);
}
}
file_put_contents($filename, $lastcount);
基本上它会读取一个文件,然后添加1,然后重写
问题出在我读取文件和写回文件之间,程序的另一个副本可能会读取文件并写入文件。
那我怎么做那个原子?
我还想确保整个剧本不会崩溃"因为这种锁定。
那么如何改进这个计数器?
答案 0 :(得分:1)
您可以使用flock锁定文件。使用独占锁定安全地写入文件:
$fp = fopen($filename, "rw");
if (flock($fp, LOCK_EX)) {
// write here
// ...
// release the file
flock($fp, LOCK_UN);
} else {
// can't use it yet. Wait a little.
}