2013-12-25 3 views
5

В PHP, как я могу проверить, был ли файл уже заблокирован с помощью flock? Например, если другой работает скрипт называется следующее:Тестирование, если файл заблокирован

$fp = fopen('thefile.txt', 'w'); 
flock($fp, LOCK_EX); 
+1

'if (flock ($ fp, LOCK_EX)) {' test и set lock. Если он возвращает true, файл был успешно заблокирован этим потоком, другой - файл заблокирован другим потоком – Sergey

+0

И если вы используете 'LOCK_EX | LOCK_NB', то это только знак для записи - вы можете прочитать этот файл (не в окнах) – Sergey

ответ

17
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) { 
    if ($wouldblock) { 
     // another process holds the lock 
    } 
    else { 
     // couldn't lock for another reason, e.g. no such file 
    } 
} 
else { 
    // lock obtained 
} 

Как описано в docs, используйте LOCK_NB сделать нелипкая попытку получить блокировку, а при сбое проверить аргумент $wouldblock, чтобы увидеть, что что-то еще удерживает блокировку.

-1

Проверьте это следующим образом:

if (!flock($file, LOCK_EX)) { 
    throw new Exception(sprintf('File %s is locked', $file)); 
} 

fwrite($file, $write_contents); 
+4

Это будет блок, значит, он будет ждать, пока ручка не будет разблокирована. Он не будет бросать исключение. – DanFromGermany

Смежные вопросы