flock () всегда возвращает true

Был над этим в течение последнего часа, и не могу понять, что не так.

Это код, который я использовал для устранения проблемы.

Monitor.php

$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_EX | LOCK_NB);
var_dump($var);
$var=flock($fp, LOCK_SH | LOCK_NB);
var_dump($var);
exit;

locker.php

$fp = fopen("lock.txt", "r+");
sleep(60);

Чтобы проверить, правильно ли работает flock, я сначала запускаю locker.php, чтобы файл был заблокирован на 60 секунд, а затем пытаюсь запустить monitor.php, чтобы узнать, смогу ли я получить блокировку.

я получил TRUE как для эксклюзивной, так и для общей блокировки.

В чем будет проблема?

Решение: Предполагается, что открытие файла заблокирует его. Шкафчик должен выдать стадо, чтобы заблокировать файл.

Пропустил эту часть в спешке. Сроки. Сроки 🙂

2

Решение

locker.php есть не блокировка файл. открытие файла не заблокирует его. flock это совместное консультирование система блокировки. Все стороны должны участвовать в нем и использовать flock заблокировать и / или проверить на наличие замков. Если только locker.php явно flockФайл не заблокирован.

3

Другие решения

Под PHP (и многими системами UNIX), flock является консультирование, означающий, что все процессы, которые хотят использовать файл, должны использовать блокировку. Те, которые не могут делать с файлом все, что хотят, и не будут препятствовать другим процессам получать блокировки.

Ваш locker программа должна открыться а также заблокировать файл, например:

$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_SH | LOCK_NB);
sleep(60);
1

По вопросам рекламы [email protected]