Проверьте, заблокирован ли файл с помощью flock ()? [дубликат]
этот вопрос уже есть ответ здесь:
- Проверьте, заблокирован ли файл 2 ответы
у меня есть файл, в который я пишу, но мне нужно сначала заблокировать его (используя 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);
как описано в docs используйте LOCK_NB
чтобы сделать неблокирующую попытку получить блокировку, и при сбое проверьте
ваш вызов flock-это проверка, чтобы узнать, заблокирован ли он. Если он заблокирован, то оператор if () потерпит неудачу, поэтому вы можете просто бросить на него что-то вроде:
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
} else {
echo "$file is locked.";
}