flock()
is PHP's portable advisory file locking function. They explicitly promote that it even works under windows:
flock() allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unix derivatives and even Windows).
I'd like to put an also portable timeout on a blocking flock()
(and no busy waiting work around with the LOCK_NB
option). In UNIX this can simply be achieved with setting an alarm which would send a SIGALRM
:
pcntl_signal(SIGALRM, function() {});
pcntl_alarm(3);
try {
if (!flock($handle, LOCK_EX)) {
throw new \Exception("Timeout");
}
} finally {
pcntl_alarm(0);
pcntl_signal_dispatch();
pcntl_signal(SIGALRM, SIG_DFL);
}
Is there a portable way to put a timeout on a blocking flock()
? If so, how?