Я пытаюсь простой алгоритм, который говорит:PHP блок файла от чтения
File1: (lock.php)
- Открыть файл
- Блокировка файла, так что никакой другой PHP файл может прочитать эту
- Sleep
- релиз Замок
File2: (lockstatus.php)
- Попробуйте открыть файл.
- Если не открывая
- Дождитесь блокировки, чтобы освободить
- Else
- Прочитайте файл
Моя реализация кода:
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
может открыть файл.
Вопрос:
Как заблокировать файл для чтения в Lockstatus.php
, когда он заблокирован Lock.php
?
Я использую Linux. Поэтому, я думаю, это должно работать в моем случае. И сделал это «r +», однако это не сработает. –
Взгляните на первый комментарий к документам: «Функция flock следует за семантикой системного вызова Unix с тем же именем. Flock использует только блокировку ADVISORY, то есть другие процессы могут полностью игнорировать блокировку, она затрагивает только те, которые позвоните в звонок стада ». –