如何在php上改进这个简单的计数器

时间:2015-05-28 09:12:10

标签: php counter

我制作这个简单的计数器

$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,然后重写

问题出在我读取文件和写回文件之间,程序的另一个副本可能会读取文件并写入文件。

那我怎么做那个原子?

我还想确保整个剧本不会崩溃"因为这种锁定。

那么如何改进这个计数器?

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.
}