我通过将当前计数存储在文件中来制作一个简单的页面加载计数器。这就是我想要这样做的方式:
这可以在不失去锁定的情况下完成吗?
据我了解,在不丢失锁定的情况下无法写入文件。我想出解决这个问题的唯一方法是使用“r +”模式编写一个字符,然后计算字符数。
答案 0 :(得分:19)
如上所述,你可以使用FLock。一个简单的例子是:
//Open the File Stream
$handle = fopen("file.txt","r+");
//Lock File, error if unable to lock
if(flock($handle, LOCK_EX)) {
$count = fread($handle, filesize("file.txt")); //Get Current Hit Count
$count = $count + 1; //Increment Hit Count by 1
ftruncate($handle, 0); //Truncate the file to 0
rewind($handle); //Set write pointer to beginning of file
fwrite($handle, $count); //Write the new Hit Count
flock($handle, LOCK_UN); //Unlock File
} else {
echo "Could not Lock File!";
}
//Close Stream
fclose($handle);
答案 1 :(得分:3)
我相信你可以使用flock
实现这一目标。打开指向文件的指针flock
,读取数据,写入数据,然后关闭(关闭自动解锁)。
答案 2 :(得分:1)
是的,你必须在ftruncate
之前使用倒带。否则,文件的旧内容仅用零重新填充。
工作顺序是:
fopen
flock LOCK_EX
fread filesize
rewind
ftruncate 0
fwrite
flock LOCK_UN
fclose