>백엔드 개발 >PHP 튜토리얼 >PHP에서 파일을 잠그고 잠금 해제하는 방법

PHP에서 파일을 잠그고 잠금 해제하는 방법

小云云
小云云원래의
2018-02-10 10:27:311548검색

프로젝트에서는 데이터베이스 쿼리 로그, 액세스 로그, 외부 인터페이스 요청 반환 매개변수 로그 등 로그가 일반적으로 사용됩니다. 이 기사에서는 주로 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는 잠금을 통해 동시 스냅업 기능을 구현합니다

MySQL 문 잠금 구현 방법

Mysql 높은 동시성 잠금 트랜잭션 처리

위 내용은 PHP에서 파일을 잠그고 잠금 해제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.