나는 내 웹 사이트에서 사용법을 추적하기 위해 신참 (다음 문 십대)의 PHP 코드를 작성했습니다. 나는 PHP에 익숙하지 않아서 동시 파일 액세스에 대해 조금 묻고있다.PHP로 파일 잠금
내 기본 앱 (Windows)은 때때로 내 PHP 스크립트가 포함 된 URL을 눌러 내 사이트에 일부 데이터를 기록합니다. 원시 앱은 반환 된 데이터를 검사하지 않습니다.
$fh = fopen($updateFile, 'a') or die("can't open file");
fwrite($fh, $ip);
fwrite($fh, ', ');
fwrite($fh, $date);
fwrite($fh, ', ');
fwrite($fh, implode(', ', $_GET));
fwrite($fh, "\r\n");
fclose($fh);
트래픽이 적은 사이트이며 데이터는 중요하지 않습니다. 그러나 두 명의 사용자가 충돌하고 두 개의 스크립트 인스턴스가 각각 파일에 행을 추가하려고하면 어떻게됩니까? php에서 암시 적 파일 잠금이 있습니까?
위의 코드는 잠금을 해제하고 내 사용자에게 제어 권한을 반환하지 않는 것이 안전합니까? 파일이 손상 될 수 있습니까? 위의 스크립트를 사용하여 매월 파일을 삭제 한 경우 스크립트의 다른 인스턴스가 파일에 쓰는 중일 때 어떻게됩니까?
정확히 내가 찾고 있었던 것, 레이먼드. 감사. 방금 한 다른 독서 (http://www.tuxradar.com/practicalphp/8/11/0)에서 echo 문에 절대로 도달 할 수없는 것으로 보입니다. 첫 번째 프로세스에서 파일 잠금을 해제 할 때까지 두 번째 프로세스 블록이 flock 호출에서 차단되지 않습니까? echo 문에 도달 할 수 있도록 flock에 OR LOCK_NB가 필요하지 않습니까? – RobertFrank
위의 반향 설명에 도달했는지 아닌지에 대한 견해로 호나 다른 누군가로부터 응답을 받기를 희망했다. – RobertFrank
예, 코드에'| LOCK_NB'가 필요합니다. 그렇지 않으면 잠금이 이미 잠겨 있으면 잠금이 잠길 것입니다. :) – cweiske