PHP의 flock
함수
flock
함수는 파일에 대한 잠금(lock)을 수행하는데 사용됩니다. 파일 잠금은 여러 프로세스 또는 스레드가 동시에 같은 파일을 수정하는 것을 방지하는데 사용됩니다. 이 함수를 사용하여 파일에 잠금을 걸거나 해제할 수 있습니다.
flock
함수의 사용 예시:
$filename = 'example.txt';
$fileHandle = fopen($filename, 'a+');
if (flock($fileHandle, LOCK_EX)) { // 배타적 잠금 설정 (다른 프로세스의 잠금 대기)
fwrite($fileHandle, "New data to write");
flock($fileHandle, LOCK_UN); // 잠금 해제
} else {
echo "Failed to lock the file.";
}
fclose($fileHandle);
다른 함수와 함께 사용하는 예시:
file_get_contents
함수와 함께 사용하기 (파일 읽기와 잠금 설정):
$filename = 'example.txt';
$fileContents = file_get_contents($filename);
if ($fileContents !== false) {
$fileHandle = fopen($filename, 'r+');
if (flock($fileHandle, LOCK_SH)) { // 공유 잠금 설정 (다른 프로세스의 잠금 대기)
// 파일 내용을 수정하지 않고 읽기만 하는 작업
// ...
flock($fileHandle, LOCK_UN); // 잠금 해제
} else {
echo "Failed to lock the file.";
}
fclose($fileHandle);
} else {
echo "Failed to read the file.";
}
file_put_contents
함수와 함께 사용하기 (파일 쓰기와 잠금 설정):
$filename = 'example.txt';
$dataToWrite = "New data to write";
$fileHandle = fopen($filename, 'a+');
if (flock($fileHandle, LOCK_EX)) { // 배타적 잠금 설정 (다른 프로세스의 잠금 대기)
file_put_contents($filename, $dataToWrite, FILE_APPEND);
flock($fileHandle, LOCK_UN); // 잠금 해제
} else {
echo "Failed to lock the file.";
}
fclose($fileHandle);
조건문과 반복문과 함께 사용하는 예시:
$filename = 'example.txt';
$fileHandle = fopen($filename, 'a+');
if (flock($fileHandle, LOCK_EX)) { // 배타적 잠금 설정 (다른 프로세스의 잠금 대기)
for ($i = 1; $i <= 10; $i++) {
fwrite($fileHandle, "Data $i\n");
}
flock($fileHandle, LOCK_UN); // 잠금 해제
} else {
echo "Failed to lock the file.";
}
fclose($fileHandle);
성능 향상을 위한 팁:
-
flock
함수는 파일에 대한 잠금을 수행하는 함수이므로, 파일을 열 때마다 잠금 설정과 해제를 반복해서 수행하는 것은 성능 저하를 가져올 수 있습니다. 가능하면 파일 핸들을 최대한 재활용하고, 잠금 설정과 해제를 필요한 최소한의 범위에서 수행하여 성능을 향상시키는 것이 좋습니다. -
다중 프로세스 또는 스레드에서 파일을 사용하는 경우, 잠금 모드를 적절하게 선택하여 동시성 문제를 방지하고 데이터 무결성을 보장하는 것이 중요합니다.