이 글에서는 주로 PHP의 파일 잠금 및 잠금 해제 작업 구현 방법을 소개합니다. 파일 잠금 및 잠금 해제 작업에 대한 PHP의 기능, 구현 방법 및 관련 주의 사항을 예제 형식으로 분석합니다.
프로젝트에서는 데이터베이스 쿼리 로그, 액세스 로그, 외부 인터페이스 요청 반환 매개변수 로그 등 로그가 일반적으로 사용됩니다. 로그 처리 시 간단한 작성 방법은 다음과 같습니다
$file = 'log.txt'; $fp = fopen($file, 'a+'); if(!is_writable($file)){ die("The $file is not writable!"); } fwrite($fp, 'here'); fclose($fp);
그런데 이 작성 방법은 다음과 같습니다. Flaw로 구성되어 있어 한 명의 사용자만이 웹 사이트에 접속할 수 없으며 여러 사용자가 동시에 접속하면 문제가 발생합니다. 즉, 여러 프로세스가 동일한 리소스를 사용하면 이전 프로세스가 쓰기 시작합니다. 중간에 작성되었으므로 최종 생성된 로그가 엉망이 되었습니다. 이 경우 잠금이 사용됩니다. 파일 잠금 기간 동안 다른 프로세스는 파일이 잠금 해제된 경우에만 작동할 수 있습니다. 작성 내용은 다음과 같습니다
$file = 'log.txt'; $fp = fopen($file, 'a+'); if(!is_writable($file)){ exit("The $file is not writable!"); } flock($fp, LOCK_EX);// 加锁 fwrite($fp, 'here'); flock($fp, LOCK_UN);// 解锁 fclose($fp);
파일 잠금 기간 동안 다른 프로세스가 파일을 조작할 수 없는 예시를 테스트하고 싶다면 아래 데모를 이용하시면 됩니다
log.php
$file = 'log.txt'; $fp = fopen($file, 'a+'); if(!is_writable($file)){ exit("The $file is not writable!"); } flock($fp, LOCK_EX); fwrite($fp, 'here'); sleep(10); flock($fp, LOCK_UN); fclose($fp);
test.php
$file = 'lock.txt'; $fp = fopen($file, 'a'); fwrite($fp, 'good'); // 在sleep期间写不进去 fclose($fp); // 或是直接使用下面的这个例子,发现在sleep期间打印是个空值 //var_dump(file_get_contents($file));
테스트할 때 log.php를 먼저 실행한 다음 test.php를 실행하면 절전 모드에서는 test.php가 효과를 얻을 수 없다는 것을 알 수 있습니다.
위 내용은 PHP는 파일 잠금 및 잠금 해제 방법을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!