이 기사의 예에서는 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 파일을 읽기 및 쓰기 모드로 연다는 것입니다. 즉, 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 프로그래밍 설계에 도움이 되기를 바랍니다.