備註:此處提供的範例具有明確清空檔案的指令,但是使用「w」的「寫入模式」會自動執行此操作,因此不需要呼叫 truncate。
(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("Write something here\n");
$file->flock(LOCK_UN); // 釋放鎖定
} else {
echo "無法取得鎖定!";
}
?>
備註:此處提供的範例具有明確清空檔案的指令,但是使用「w」的「寫入模式」會自動執行此操作,因此不需要呼叫 truncate。
@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("Write something here\n");
$file->flock(LOCK_UN); // 釋放鎖定
} else {
echo "無法取得鎖定!";
}
?>
"lock.txt" 檔案內容
xxxxxWrite something here