PHP Flock 사용 예에 ​​대한 설명

jacklove
풀어 주다: 2018-06-09 11:04:43
원래의
2724명이 탐색했습니다.

php Flock 사용 예

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
로그인 후 복사

flock()을 사용하면 모든 플랫폼(대부분의 Unix 파생 제품 및 Windows 포함)에서 사용할 수 있는 간단한 읽기/쓰기 모델을 구현할 수 있습니다.

PHP 5.3 이전. 2, 잠금은 fclose()(스크립트가 끝난 후 자동으로 호출됨)에 의해 해제되지만 이제는 수동으로 잠금을 해제해야 합니다

operation

1.LOCK_SH 공유 잠금 가져오기(읽기) 프로그램)

2.LOCK_EX 독점 잠금 받기(프로그램 작성)

3.LOCK_UN 잠금 해제(공유 또는 독점 여부)

4.LOCK_NB 무리할 때 차단하지 않음( )이 잠겨 있습니다

예 1: A는 단독 잠금을 사용하여 파일을 쓰고 B는 파일을 읽고 차단

a.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;w&#39;);
if(flock($fp, LOCK_EX)){            // 取得独占锁
    fwrite($fp, "Hello World\r\n"); // 写入数据
    sleep(10);                      // sleep 10秒,文件被锁定
    fwrite($fp, "Hello PHP\r\n");   // 写入数据
    flock($fp, LOCK_UN);            // 解锁
}
fclose($fp);
?>
로그인 후 복사

b.

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
if(flock($fp, LOCK_SH)){ // 取得贡献锁
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}
fclose($fp);
?>
로그인 후 복사
먼저 a.php를 실행한 다음 b.php

를 실행하면 a가 독점 잠금을 획득하고 b는 기다릴 수만 있으며 a가 실행되고 잠금이 해제된 후에만 b를 실행할 수 있습니다. blocking

예 2: A와 B 모두 차단 없이 공유 잠금을 사용합니다.

a.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
if(flock($fp, LOCK_SH)){ // 取得共享锁
    sleep(10);           // sleep 10秒
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}
fclose($fp);
?>
로그인 후 복사
b.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
if(flock($fp, LOCK_SH)){ // 取得共享锁
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}
fclose($fp);
?>
로그인 후 복사
먼저 a.php를 실행한 후 실행 ing b.php

b는 a가 실행될 때까지 기다리지 않고 파일 내용을 출력할 수 있습니다. .php를 먼저 실행한 다음 b.php를 실행합니다

b는 데이터를 쓰기 전에 a가 실행될 때까지 기다려야 합니다. Blocking

예 4: LOCK_NB는 잠겨 있을 때 차단하지 않고 기다리지 않습니다.

a.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;a&#39;);
if(flock($fp, LOCK_EX)){            // 取得独占锁
    fwrite($fp, "Hello World\r\n"); // 写入数据
    sleep(10);                      // sleep 10秒,文件被锁定
    fwrite($fp, "Hello PHP\r\n");   // 写入数据
    flock($fp, LOCK_UN);            // 解锁
}
fclose($fp);
?>
로그인 후 복사

b.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;a&#39;);
if(flock($fp, LOCK_EX)){                    // 取得独占锁
    fwrite($fp, "How Are You\r\n");         // 写入数据
    fwrite($fp, "Show Me The Money\r\n");   // 写入数据
    flock($fp, LOCK_UN);                    // 解锁
}
fclose($fp);
?>
로그인 후 복사

먼저 a.php를 실행하고, 그다음 b.php를 실행

b는 단독 잠금을 얻을 수 없습니다. 당신 실행이 완료될 때까지 기다릴 필요는 없지만 잠금 해제 프롬프트를 직접 반환합니다.

non-blocking

요약: 공유 잠금 사용 LOCK_SH

. 읽는 중이면 기다릴 필요가 없지만, 쓰는 중이라면 읽기가 완료될 때까지 기다려야 합니다.

전용 잠금 LOCK_EX

을 사용하면 쓰기/읽기 모두 기다려야 합니다.

LOCK_UN

, 공유/읽기 잠금을 사용하더라도 사용 후에는 잠금을 해제해야 합니다.

LOCK_NB은 잠겨 있으면 차단하지 않지만 잠금 메시지를 표시합니다. 이 글에서는 php Flock의 사용예를 설명하고 있습니다. 더 많은 관련 내용은 php 중국어 홈페이지를 참고해주세요.

관련 권장 사항:

php str_replace 지정된 시간을 바꾸는 방법에 대한 설명

header, headers_sent, headers_list, header_remove 사용 지침 정보

PDO 쿼리를 통해 mysql은 필드 정수를 반환합니다. 문자열 유형에 대한 변수 솔루션

위 내용은 PHP Flock 사용 예에 ​​대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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