Я полагаю, что краткий ответ будет NO , из моего "исследования" я обнаружил, что в настоящее время в PHP нет реализации семафоров с именами POSIX.
Боб Фэнджер опубликовал интересный обходЧтобы преобразовать строки в ключи семафора SysV, недостатком является то, что вы должны реализовывать один и тот же алгоритм в каждом коде, в котором вам нужен семафор.
Однако в итоге я использовал flock()
для файла блокировки.
PHP
# open an exclusive lock
$lock = fopen('/path/to/file.lock', 'w');
flock($lock, LOCK_EX);
# edit a file
$f = fopen ('/path/to/file.txt', 'a');
fwrite($f, "append through PHP\n");
fclose($f);
# unlock
flock($lock, LOCK_UN);
fclose($lock);
PERL
use Fcntl qw(:flock);
# open an exclusive lock
open LOCK, '>/path/to/file.lock';
flock LOCK, LOCK_EX;
# edit a file
open FILE, '>>/path/to/file.txt';
print FILE "append through PERL\n";
close FILE;
# unlock
flock LOCK, LOCK_UN;
close LOCK;
Я знаю, что дополнительный файл блокировки может показаться излишним, новы можете использовать LOCK_EX
только в режиме записи, а иногда мне нужно было только прочитать файл.
примечание: flock()
работает в качестве рекомендательного механизма блокировки файлов, если любая другая программапытается изменить файл без вызова flock()
, это удастся.