> 백엔드 개발 > PHP 튜토리얼 > PHPflock 파일 잠금을 사용하는 방법

PHPflock 파일 잠금을 사용하는 방법

墨辰丷
풀어 주다: 2023-03-31 08:14:02
원래의
1651명이 탐색했습니다.

이 글은 관심있는 친구들이 참고하시면 좋을 것 같습니다.

이 문서의 예에서는 PHP가 Flock을 사용하여 파일 잠금을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다:

공식 문서에서 flock의 설명은 다음과 같습니다: Flock()을 사용하면 모든 플랫폼(대부분의 Unix 파생 제품 및 Windows 포함)에서 사용할 수 있는 간단한 읽기/쓰기 모델을 구현할 수 있습니다. 잠금이 차단되면(EWOULDBLOCK 오류 코드의 경우) 선택적 세 번째 매개변수를 TRUE로 설정합니다. 잠금 작업은 fclose()에 의해 해제될 수도 있습니다(코드 실행이 완료되면 자동으로 호출되기도 함).

간단히 말하면, 여러 프로세스가 파일에 접근하는 것을 제한하여 충돌을 방지하도록 파일을 잠그는 것입니다. 예:

<?php 
  $file = fopen("test.txt","w+"); 
  if (flock($file,LOCK_EX)) 
  { 
   fwrite($file,"Write something"); 
   flock($file,LOCK_UN); 
  } 
  else 
  { 
    echo "Error locking file!"; 
  } 
  fclose($file); 
?>
로그인 후 복사

설명:

1 이 코드의 의미는 test.txt 파일을 읽기 및 쓰기 모드로 여는 것입니다. 사용자가 php 페이지를 호출하면 test.txt 파일이 실행됩니다. ($file,LOCK_EX) 코드가 실행되어 test.txt 파일을 독점적으로 잠급니다(파일은 이 사용자만 읽고 쓸 수 있습니다). 그런 다음 다른 신규 사용자가 파일에 액세스하려고 하면 차단됩니다. 전자가 파일을 닫을 때까지(잠금 해제).

2. 코드를 Flock($file,LOCK_EX+LOCK_NB)으로 변경하면 잠금 시 바로 오류가 반환된다는 의미입니다. 그러다가 새로운 사용자가 파일에 접근하면 "파일 잠금 중 오류가 발생했습니다!"가 출력됩니다.

3. 이 함수 구문은 Flock(file,lock,block)이며, 여기서는 file이 필요합니다. 열려 있는 파일을 잠그거나 해제하도록 지정합니다. 잠금이 필요합니다. 사용할 잠금 유형을 지정합니다. 블록은 선택 사항입니다. 1 또는 true로 설정하면 잠그는 동안 다른 프로세스를 차단합니다.

예: 여러 프로세스가 동시에 동일한 파일을 성공적으로 쓸 수 있도록 PHP 코드를 작성하세요

function writeData($path, $mode,$data) 
{ 
  $fp = fopen($path, $mode);  
  $retries = 0; 
  $max_retries = 100;  
  do{ 
    if ($retries > 0)  
    { 
      usleep(rand(1, 10000)); 
    } 
    $retries += 1; 
  }while (!flock($fp, LOCK_EX) and $retries<= $max_retries);  
  if ($retries == $max_retries)  
  { 
    return false; 
  } 
  fwrite($fp, "$data\n"); 
  flock($fp, LOCK_UN); 
  fclose($fp);  
  return true;  
}
로그인 후 복사

요약:위는 이 기사의 전체 내용입니다. 도움이 되기를 바랍니다. 모두의 배움에.

관련 권장 사항:

PHP에서 날짜와 문자열을 조작하는 방법

php 코드 및 도구 클래스를 사용하여 웹 페이지 캐싱 구현

php는 모든 백그라운드 함수 호출을 제어하는 ​​ajax 기반

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿