我想要一個簡單的算法,它說:PHP塊文件讀取
文件1:(lock.php)
- 打開一個文件
- 鎖定文件,所以沒有其他PHP文件可以讀取該
- 睡眠
- 釋放鎖定
文件2: (lockstatus.php)
- 嘗試打開文件。
- 如果不開放
- 等待鎖釋放
- 否則
- 讀取文件
我的代碼實現:
Lock.php:
<?php
$f = fopen("key",'a');
if (flock($f, LOCK_EX | LOCK_NB)) {
echo "File Locked. For Next 60 Seconds\n";
sleep(60);
var_dump(flock($f, LOCK_UN)); //release lock
echo "lock released";
} else {
echo "blocked";
}
?>
Lockstatus.php
<?php
do {
echo "\n";
$f = fopen("key",'a');
if ($f) {
echo "Readable\n";
fclose ($f);
} else {
echo "Blocked! I am waiting\n";
sleep(10);
}
} while (!$f); //wait until fopen does not work
?>
問題: 甚至,flock
應用,該Lockstatus.php
能夠打開該文件。
問:
如何阻止該文件一旦被Lock.php
鎖定在Lockstatus.php
讀書?
我正在使用Linux。因此,我想它應該適用於我的情況。然後使它成爲'r +',但它不起作用。 –
看看文檔的第一條評論:「flock函數遵循Unix系統調用的語義,它們使用相同的名稱,Flock僅使用ADVISORY鎖;也就是說,其他進程可能完全忽略該鎖;它隻影響那些召喚羊羣呼叫。「 –