bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

flock 함수는 파일을 쓰거나 읽을 때, 또는 파일 잠금 해제 등 유닉스나 윈도우에서 작동합니다. 파일 작성 중 다른 사용자의 사용의 접근을 차단하여 파일의 깨지는 문제를 예방할 수 있습니다.

flock 함수는 다음의 상수를 사용할 수 있습니다.

상 수 설 명
LOCK_SH 파일 읽기일 때 잠금
LOCK_EX 파일 쓰기일 때 잠금
LOCK_UN 파일 잠금 해제

사용방법은 다음과 같습니다.

<?php
 // 파일 새로 작성시
 if($fp = @fopen('readme.txt', 'wb'))
 {
       // 파일을 먼저 잠금합니다.
       @flock($fp, LOCK_EX);

       fwrite($fp, "새로운 내용을 작성합니다.");

       // 작업을 마쳤으면 파일 잠금 해제합니다.
       @flock($fp, LOCK_UN;

       fclose($fp);
 }
 
 // 파일에 내용 추가시
 if($fp = @fopen('readme.txt', 'ab'))
 {
       // 파일을 먼저 잠금합니다.
       @flock($fp, LOCK_SH);

       fwrite($fp, "새로운 라인을 추가합니다.");

       // 작업을 마쳤으면 파일 잠금 해제합니다.
       @flock($fp, LOCK_UN;
      
       fclose($fp);
 }
 ?>

해당 파일에 접근하는 사용자수가 많다면 파일이 깨지는 경우가 발생하므로 반드시 파일 쓰기 작업일 때는 파일 잠금을 해두는 게 좋으며 파일 읽기일 때는 flock 기능 보다는 readfile 함수나 fpassthru 함수를 이용하는 편이 더 효율적일 것입니다.

0 댓글