나는 file()을 사용하여 탭이있는 배열과 같은 파일을 읽습니다. 파일을 잠그고 싶지만 파일에 대해 flock()을 수행 할 수 없습니다. 이것을 할 수 있습니까? 그렇다면 어떻게? 그렇지 않은 경우 file()이 파일을 처음부터 잠그고 잠재적 인 공유 문제를 완화합니까?file()은 읽을 때 파일을 잠근다?
3
A
답변
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()
사용하여 파일을 읽고 별도의 "잠금 파일"을 사용 :
(오류 검사없이)
fgets
으로 파일을 읽어$f = fopen($file . '.lock', 'w'); flock($f, LOCK_SH); $data = file($file); flock($f, LOCK_UN); fclose($f); unlink($file . '.lock');
+0
완벽한 감사합니다! –
수 여기에서 달성하고자하는 것을 설명하는 코드 샘플을 제공합니까? 어떤 파일 시스템을 사용합니까? – Gajahlemu