Проверьте, заблокирован ли файл с помощью 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);

как описано в docs используйте LOCK_NB чтобы сделать неблокирующую попытку получить блокировку, и при сбое проверьте


ваш вызов flock-это проверка, чтобы узнать, заблокирован ли он. Если он заблокирован, то оператор if () потерпит неудачу, поэтому вы можете просто бросить на него что-то вроде:

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);
} else {
    echo "$file is locked.";
}