Блокирует ли файл () файл при чтении? - PullRequest
3 голосов
/ 25 января 2011

Я использую file () для чтения файла, например массива с вкладками. Я хочу заблокировать файл, но не могу заставить flock () работать с файлом. Можно ли сделать это? Если так, то как? Если нет, блокирует ли файл () файл с самого начала и устраняет ли потенциальные проблемы с совместным использованием?

1 Ответ

4 голосов
/ 25 января 2011

Согласно документации (в частности, комментариям), он не будет читать файл, заблокированный с помощью flock.

У вас есть 2 варианта.

  1. Считайте файл с fgets (без проверок на ошибки):

    $f = fopen($file, 'r');
    flock($f, LOCK_SH);
    $data = array();
    while ($row = fgets($f)) {
        $data[] = $row;
    }
    flock($f, LOCK_UN);
    fclose($f);
    
  2. Считайте файл с file() и используяотдельный "файл блокировки":

    $f = fopen($file . '.lock', 'w');
    flock($f, LOCK_SH);
    $data = file($file);
    flock($f, LOCK_UN);
    fclose($f);
    unlink($file . '.lock');
    
...