В PHP, как я могу проверить, был ли файл уже заблокирован с помощью flock
? Например, если другой работает скрипт называется следующее:Тестирование, если файл заблокирован
$fp = fopen('thefile.txt', 'w');
flock($fp, LOCK_EX);
В PHP, как я могу проверить, был ли файл уже заблокирован с помощью flock
? Например, если другой работает скрипт называется следующее:Тестирование, если файл заблокирован
$fp = fopen('thefile.txt', 'w');
flock($fp, LOCK_EX);
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
if ($wouldblock) {
// another process holds the lock
}
else {
// couldn't lock for another reason, e.g. no such file
}
}
else {
// lock obtained
}
Как описано в docs, используйте LOCK_NB
сделать нелипкая попытку получить блокировку, а при сбое проверить аргумент $wouldblock
, чтобы увидеть, что что-то еще удерживает блокировку.
Проверьте это следующим образом:
if (!flock($file, LOCK_EX)) {
throw new Exception(sprintf('File %s is locked', $file));
}
fwrite($file, $write_contents);
Это будет блок, значит, он будет ждать, пока ручка не будет разблокирована. Он не будет бросать исключение. – DanFromGermany
'if (flock ($ fp, LOCK_EX)) {' test и set lock. Если он возвращает true, файл был успешно заблокирован этим потоком, другой - файл заблокирован другим потоком – Sergey
И если вы используете 'LOCK_EX | LOCK_NB', то это только знак для записи - вы можете прочитать этот файл (не в окнах) – Sergey