>백엔드 개발 >PHP 튜토리얼 >PHP는 파일 잠금 및 잠금 해제 방법을 구현합니다.

PHP는 파일 잠금 및 잠금 해제 방법을 구현합니다.

墨辰丷
墨辰丷원래의
2018-05-21 09:15:211949검색

이 글에서는 주로 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 파일 잠금 동시성 작업에 대한 자세한 설명

PHP 파일 잠금 및 프로세스 잠금 분석 예

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

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