为了记录,此处给出的示例包含显式命令来截断文件,但是使用 'w' 的 '写入模式',它会自动为您执行此操作,因此不需要截断调用。
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SplFileObject::flock — 可移植文件锁定
以与 flock() 相同的可移植方式锁定或解锁文件。
示例 #1 SplFileObject::flock() 示例
<?php
$file = new SplFileObject("/tmp/lock.txt", "w");
if ($file->flock(LOCK_EX)) { // 执行独占锁定
$file->ftruncate(0); // 截断文件
$file->fwrite("在此处写入内容\n");
$file->flock(LOCK_UN); // 释放锁定
} else {
echo "无法获取锁定!";
}
?>
为了记录,此处给出的示例包含显式命令来截断文件,但是使用 'w' 的 '写入模式',它会自动为您执行此操作,因此不需要截断调用。
@digitalprecision 你说的话并不完全正确,如果在获取锁之前对文件进行了写入,则需要 ftruncate(0);。您可能还需要 fseek(0); 将文件指针移回文件开头
<?php
$file = new SplFileObject("/tmp/lock.txt", "w");
$file->fwrite("xxxxx"); // 在获取锁之前写入内容
sleep(5); // 等待 5 秒
if ($file->flock(LOCK_EX)) { // 执行独占锁定
$file->fwrite("在此处写入内容\n");
$file->flock(LOCK_UN); // 释放锁定
} else {
echo "无法获取锁定!";
}
?>
"lock.txt" 内容
xxxxx在此处写入内容