У меня есть файл, к которому я пишу, но сначала мне нужно его заблокировать (используя 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."; }