Проверьте, заблокирован ли файл с помощью flock ()?

У меня есть файл, к которому я пишу, но сначала мне нужно его заблокировать (используя flock() ), чтобы не накладывать на него никакого другого скрипта. Так что я:

 $file=fopen($file_p); if (flock($file, LOCK_EX)) {//lock was successful fwrite($file,$write_contents); } 

Но мне нужно проверить, заблокировано ли это, чтобы другие скрипты не писали.

Как я могу это сделать?

Я бы проверял, не могу ли я получить блокировку в файле, например:

 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 } 

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

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