當我使用選項時,w 它會在讀取檔案之前截斷檔案。我想鎖定多個腳本使用的檔案,然后讀取和覆寫,然后解鎖。這是簡化的代碼。
$fp = fopen($file, "w ");
if(flock($fp, LOCK_EX)) {
$content = fread($fp, $filesize);
echo $content; // this is empty, must not be empty
$job_queue = explode("\n", $content, LOCK_EX);
$next_job = array_shift($job_queue);
fwrite($fp, implode("\n", $job_queue));
flock($fp, LOCK_UN);
} else {
echo '<br>Error: cannot lock job queue file';
}
fclose($fp);
uj5u.com熱心網友回復:
r = read mode only
r = read/write mode
w = write mode only
w = read/write mode, if the file already exists override it (empty it)
改為執行“r ”并用 PHP 截斷 ftruncate()
uj5u.com熱心網友回復:
為了解決它,手動添加一個截斷到 0(檔案開頭)并將打開選項更改為 a
$fp = fopen($file, "a ");
if(flock($fp, LOCK_EX)) {
$content = fread($fp, $filesize);
echo $content; // this is not empty now
$job_queue = explode("\n", $content, LOCK_EX);
$next_job = array_shift($job_queue);
ftruncate($fp, 0);
fwrite($fp, implode("\n", $job_queue));
flock($fp, LOCK_UN);
} else {
echo '<br>Error: cannot lock job queue file';
}
fclose($fp);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318453.html
