2011-01-25 5 views
3

나는 file()을 사용하여 탭이있는 배열과 같은 파일을 읽습니다. 파일을 잠그고 싶지만 파일에 대해 flock()을 수행 할 수 없습니다. 이것을 할 수 있습니까? 그렇다면 어떻게? 그렇지 않은 경우 file()이 파일을 처음부터 잠그고 잠재적 인 공유 문제를 완화합니까?file()은 읽을 때 파일을 잠근다?

+0

수 여기에서 달성하고자하는 것을 설명하는 코드 샘플을 제공합니까? 어떤 파일 시스템을 사용합니까? – Gajahlemu

답변

4

the documentation (특히 주석)에 따르면 flock을 통해 잠긴 파일을 읽지 않습니다.

두 가지 대안이 있습니다.

$f = fopen($file, 'r'); 
flock($f, LOCK_SH); 
$data = array(); 
while ($row = fgets($f)) { 
    $data[] = $row; 
} 
flock($f, LOCK_UN); 
fclose($f); 
  • file() 사용하여 파일을 읽고 별도의 "잠금 파일"을 사용 :

    1. (오류 검사없이) fgets으로 파일을 읽어

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

    완벽한 감사합니다! –