如何读取和写入文件,确保文件被锁定?

时间:2015-03-07 18:49:51

标签: php fopen atomicity flock

如果文件在24小时内被上次修改,我希望以数字方式递增到文件的内容,否则将文件的内容重置为1.但是我想确保无论有多少用户同时访问该脚本,这都会继续有效时间(脚本总是需要执行,但确保它不会错误地覆盖/计算 - 我相信这就是flock的用武之地。)

请参阅以下代码:

$host_limit = 50;
$file = 'timer.txt';
$fh = fopen($file,'r+');
if (flock($fh,LOCK_EX)) {
$content = fgets($fh);
//FILE HAS NOT BEEN MODIFIED IN LAST 24 HOURS
if (strtotime('-24 hours') > filemtime($file)) {
$content = 1;
} else {
$content = ($content + 1);
}
fwrite($fh, $content);
fflush($fh);
flock($fh,LOCK_UN);
}
fclose($fh);

if ($content < $host_limit) {
//do stuff
}

上述工作是否符合我的要求(因为无法模拟我期望测试的内容)?

1 个答案:

答案 0 :(得分:1)

您可以使用,而不是使用fopen和fwrite 的file_get_contents($文件); 和 file_put_contents($ file,$ content,LOCK_EX);

查看手册:

http://php.net/manual/en/function.file-get-contents.php

http://php.net/manual/en/function.file-put-contents.php