记录在案,此处给出的示例包含一个显式截断文件的命令,但是使用“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在此处写入内容