[php]flock

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);

다른 함수와 함께 사용하는 예시:

  1. 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.";
}
  1. 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);

성능 향상을 위한 팁:

  1. flock 함수는 파일에 대한 잠금을 수행하는 함수이므로, 파일을 열 때마다 잠금 설정과 해제를 반복해서 수행하는 것은 성능 저하를 가져올 수 있습니다. 가능하면 파일 핸들을 최대한 재활용하고, 잠금 설정과 해제를 필요한 최소한의 범위에서 수행하여 성능을 향상시키는 것이 좋습니다.

  2. 다중 프로세스 또는 스레드에서 파일을 사용하는 경우, 잠금 모드를 적절하게 선택하여 동시성 문제를 방지하고 데이터 무결성을 보장하는 것이 중요합니다.


게시됨

카테고리

,

작성자