Проверить, заблокирован ли файл с помощью flock()?
У меня есть файл, в который я пишу, но мне нужно сначала заблокировать его (используя flock()
), чтобы любой другой скрипт не записывал в него. Так что я:
$file=fopen($file_p);
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
}
Но мне нужно проверить, не заблокирован ли он, чтобы другие сценарии не могли писать в него.
Как я могу это сделать?
3 ответа
Решение
Я бы проверил, не смогу ли я получить блокировку файла, например так:
if (!flock($file, LOCK_EX)) {
throw new Exception(sprintf('Unable to obtain lock on file: %s', $file));
}
fwrite($file, $write_contents);
Как описано в документации, используйте LOCK_NB
предпринять неблокирующую попытку получить блокировку, а при ошибке проверьте $wouldblock
аргумент, чтобы увидеть, если что-то еще удерживает блокировку.
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
if ($wouldblock) {
// something already has a lock
}
else {
// couldn't lock for some other reason
}
}
else {
// lock obtained
}
Ваш стая вызов проверить, если он уже заблокирован. Если он заблокирован, то оператор if() потерпит неудачу, поэтому вы можете просто добавить к нему еще что-то вроде:
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
} else {
echo "$file is locked.";
}