프로젝트에서는 데이터베이스 쿼리 로그, 액세스 로그, 외부 인터페이스 요청 반환 매개변수 로그 등 로그가 일반적으로 사용됩니다. 이 기사에서는 주로 PHP에서 파일 잠금을 잠그고 잠금 해제하는 방법을 예제 분석과 결합하여 소개합니다. , PHP에서 파일 잠금 및 잠금 해제에 대한 구현 방법 및 관련 주의 사항이 설명되어 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
$file = 'log.txt'; $fp = fopen($file, 'a+'); if(!is_writable($file)){ die("The $file is not writable!"); } fwrite($fp, 'here'); fclose($fp);
그러나 이 작성 방식에는 결함이 있습니다. 한 명의 사용자가 동시에 웹사이트에 액세스하는 것이 아니라 여러 사용자가 동시에 액세스하면 문제가 발생합니다. 동일한 리소스. 후속 프로세스가 쓰기를 시작하기 전에 이전 프로세스가 쓰기를 시작했기 때문에 생성된 최종 로그가 엉망이 되었습니다. 이 경우 잠금이 사용됩니다. 파일 잠금 기간 동안 다른 프로세스는 파일이 잠금 해제된 경우에만 작동할 수 있습니다. 작성 내용은 다음과 같습니다
$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!