>  기사  >  백엔드 개발  >  PHP_php에서 파일 잠금을 구현하기 위해 무리를 사용하는 방법 팁

PHP_php에서 파일 잠금을 구현하기 위해 무리를 사용하는 방법 팁

WBOY
WBOY원래의
2016-05-16 20:12:311135검색

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

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

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

<&#63;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); 
&#63;>

설명:

1. 이 코드의 의미는 test.txt 파일을 읽기 및 쓰기 모드로 연다는 것입니다. 즉, test.txt 파일이 동작한 후 Flock($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 프로그래밍 설계에 도움이 되기를 바랍니다.

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