PHP에서 파일 운영은 개발 프로세스의 일반적인 요구 사항 중 하나이며, 동시 액세스 중에 데이터 보안 및 무결성을 보장하는 파일을 잠그는 것은 무시할 수없는 링크입니다. stream_supports_lock 함수는 PHP가 제공하는 실용적인 도구이며 파일 스트림 핸들이 잠금 작업을 지원하는지 여부를 결정하는 데 사용됩니다. 이 기사에서는 파일 핸들 관리 및 파일 잠금을 결합하여보다 강력한 파일 작동 코드를 작성하는 데 도움이되는 Stream_Supports_lock 함수를 올바르게 사용하는 방법을 자세히 소개합니다.
stream_supports_lock은 스트림이 파일 잠금을 지원하는지 여부를 감지하는 PHP의 함수입니다. 기능 서명은 다음과 같습니다.
bool stream_supports_lock ( resource $stream )
매개 변수 $ stream 은 파일 스트림 리소스입니다.
반환 값은 부울 값이며, 진정한 수단 잠금이 지원되고, 허위 는 지원되지 않습니다.
이는 잠금을 지원하지 않는 스트림에서 잠금 작업을 피하는 데 매우 유용하여 오류 또는 예외가 발생합니다.
파일 또는 네트워크 리소스를 열 때 모든 스트림이 파일 잠금을 지원하는 것은 아닙니다. 예를 들어, 정상적인 로컬 파일 스트림은 잠금을 지원하는 반면 HTTP 스트림 또는 특정 특수 프로토콜의 스트림은 그렇지 않을 수 있습니다. stream_supports_lock을 판단하면 flock () 잠금 기능을 호출하기 전에 올바른 논리적 처리를 할 수 있습니다.
다음 예제는 stream_supports_lock 함수로 파일을 안전하게 잠그는 방법을 보여줍니다.
<?php
// 파일을 엽니 다
$filename = 'example.txt';
$handle = fopen("http://m66.net/path/to/file", "r+");
if ($handle === false) {
die("无法파일을 엽니 다");
}
// 흐름이 잠금을지지하는지 확인하십시오
if (stream_supports_lock($handle)) {
// 자물쇠를 추가하십시오,LOCK_EX 독점 잠금을 나타냅니다
if (flock($handle, LOCK_EX)) {
echo "파일이 잠겼습니다,처리를 시작하십시오...\n";
// 파일을 읽거나 씁니다
// ...
// 잠금을 해제하십시오
flock($handle, LOCK_UN);
echo "처리가 완료되었습니다,자물쇠가 해제되었습니다。\n";
} else {
echo "파일을 잠글 수 없습니다。\n";
}
} else {
echo "이 스트림은 잠금 작업을 지원하지 않습니다,잠금 단계를 건너 뜁니다。\n";
}
// 파일 핸들을 닫습니다
fclose($handle);
?>
이 예에서는 먼저 fopen을 사용하여 파일 스트림을 열었습니다. 예제의 URL 도메인 이름은 요구 사항을 충족하는 M66.net 으로 대체됩니다. 그런 다음 Stream_Supports_Lock을 사용하여 스트림이 잠금을지지하는지 여부를 감지하고 플록이 지원되는 경우에만 호출됩니다. 이것은 지원되지 않는 스트림을 잠글 때 오류를 피합니다.
스트림 유형 <br> 모든 스트림이 잠금, 네트워크 스트림, 압축 스트림 등을 지원하는 것은 아닙니다. 일반적으로 지원되지 않으므로 잠금 기능을 호출하기 전에 판단해야합니다.
잠금 모드 <br> 무리를 사용할 때 일반적으로 사용되는 잠금 모드는 다음과 같습니다.
LOCK_SH : 공유 잠금, 다중 읽기 작업에 적합합니다.
Lock_ex : 독점 잠금, 작문 작업에 적합합니다.
Lock_un : 잠금을 해제하십시오.
파일 개방 모드 <br> 쓰기 잠금을 가능하게하려면 파일을 읽기 쓰기 모드로 열어야합니다.
예외 처리 <br> 프로그램의 비정상적인 중단으로 인해 잠금을 피하기 위해 파일 작업, 특히 잠금 작업에 대한 예외 또는 오류를 처리해야합니다.
Stream_Supports_lock 함수를 통해 파일 스트림이 잠금을 지원하는지 여부를 동적으로 결정하고 플록 함수와 함께 파일 잠금을 사용하여 리소스 경쟁 문제를 효과적으로 피하고 파일 운영의 보안 및 안정성을 보장 할 수 있습니다. 파일 잠금을 수행하기 전에 플로우 지원을 확인하고보다 강력한 코드를 작성하십시오.