Был над этим в течение последнего часа, и не могу понять, что не так.
Это код, который я использовал для устранения проблемы.
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
как для эксклюзивной, так и для общей блокировки.
В чем будет проблема?
Решение: Предполагается, что открытие файла заблокирует его. Шкафчик должен выдать стадо, чтобы заблокировать файл.
Пропустил эту часть в спешке. Сроки. Сроки 🙂
locker.php есть не блокировка файл. открытие файла не заблокирует его. flock
это совместное консультирование система блокировки. Все стороны должны участвовать в нем и использовать flock
заблокировать и / или проверить на наличие замков. Если только locker.php явно flock
Файл не заблокирован.
Под PHP (и многими системами UNIX), flock
является консультирование, означающий, что все процессы, которые хотят использовать файл, должны использовать блокировку. Те, которые не могут делать с файлом все, что хотят, и не будут препятствовать другим процессам получать блокировки.
Ваш locker
программа должна открыться а также заблокировать файл, например:
$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_SH | LOCK_NB);
sleep(60);