> 백엔드 개발 > PHP 문제 > PHP는 파일 잠금에 대해 알고 있나요? 무슨 소용이 있나요?

PHP는 파일 잠금에 대해 알고 있나요? 무슨 소용이 있나요?

青灯夜游
풀어 주다: 2023-03-11 22:38:02
원래의
3735명이 탐색했습니다.

이전 기사에서는 PHP를 사용하여 지정된 디렉터리(하위 디렉터리 제외)에서 파일을 얻는 방법을 소개했습니다. 필요한 경우 "지정된 디렉터리에 어떤 파일이 있는지 php가 어떻게 알 수 있습니까?"를 읽어보세요. 이번에는 파일 잠금을 소개하고 파일 잠금 기능을 살펴보고 파일 잠금을 추가하고 파일 잠금을 해제하는 방법을 살펴보겠습니다.

이전 글 "

php 파일 조작: 파일을 지우고 데이터를 다시 추가하는 방법"에서 파일에 데이터를 쓰는 방법을 소개했습니다. 글에서 우리는 파일을 동시에 조작하는 단일 사용자입니다. 시간이 있으니 문제는 없습니다. 그러나 네트워크 환경에서 여러 클라이언트 사용자가 동시에 서버의 동일한 파일에 액세스하는 경우 프로그램에 오류가 발생하고 파일이 손상될 수 있습니다.

예:


  • 한 사용자가 파일에 데이터를 쓰고 있습니다(데이터가 아직 완료되지 않았습니다). 이때 다른 사용자도 파일에 데이터를 쓰고 있으며 이로 인해 데이터 쓰기 혼란이 발생합니다.

    또는 사용자가 데이터 쓰기를 마치기 전에 다른 사용자가 이 파일의 내용을 얻는 경우 사용자가 얻은 데이터는 불완전하여 불완전한 데이터가 됩니다.
  • 이 문제를 해결하기 위해 PHP는 파일을 잠그거나 해제할 수 있는 파일 잠금 메커니즘인 Flock() 함수를 제공합니다.
PHP를 사용하여 파일에 쓸 때 파일은 일시적으로 잠깁니다. 잠금이 해제된 후에만 다른 사용자가 파일을 조작할 수 있습니다. 이렇게 하면 동일한 파일에 동시에 액세스하는 동안 데이터 손상을 방지할 수 있습니다.

다음 예를 살펴보겠습니다.

<?php
header("Content-Type: text/html;charset=utf-8");    //设置字符编码
$file = "test.txt";
$handle = fopen($file,&#39;w+&#39;); //打开文件
if(flock($handle, LOCK_EX|LOCK_NB)){  //给文件上锁
    fwrite($handle, &#39;现在是:&#39;.date(&#39;Y-m-d H:i:s&#39;, time()));  //写入数据
    flock($handle, LOCK_UN);  //释放文件锁
}else{
    echo "string";
}
fclose($handle);//关闭文件
readfile($file);//读取文件内容
?>
로그인 후 복사

위 코드를 분석합니다.

먼저 fopen() 함수를 사용하여 파일을 엽니다. 그런 다음 flock($handle, LOCK_EX|LOCK_NB) 문을 사용하여 파일에 "LOCK_EX" 배타적 잠금을 추가하고 "LOCK_NB"를 설정하여 잠겼을 때 다른 프로세스를 차단하지 않도록 하고 콘텐츠를 직접 반환합니다. 그렇지 않으면 . 그런 다음 fwrite() 함수를 사용하여 쓰기 작업을 수행하고 현재 시간을 쓸 수 있습니다.

파일 작업이 완료된 후 fclose() 함수를 사용하여 파일을 닫고, 마지막으로 readfile() 함수를 사용하여 파일 내용을 읽어야 합니다. 따라서 출력 결과는 다음과 같습니다.

flock($handle, LOCK_EX|LOCK_NB)语句给文件加一个“LOCK_EX”独占锁,且设置“LOCK_NB”在锁定的情况下避免阻塞其他进程,直接返回else中的内容。接着就可以使用fwrite()函数进行写入操作,写入当前的时间了。

文件操作好后,就需要使用fclose()函数来关闭文件;最后使用readfile()函数读取文件内容。因此输出结果为:

PHP는 파일 잠금에 대해 알고 있나요? 무슨 소용이 있나요?

下面我们来简单了解一下flock()函数。

flock($file,$lock,$block)函数接受了2个必需参数$file(需要加锁/解锁的打开文件)和$lock(锁定类型)和一个可省略的参数$block(当值设置为1 或 true时,可在文件锁定时堵塞其它进程)。

$lock参数用于设置文件锁类型,可以设置一个或多个以下值(多个值需要使用|来分隔):

  • LOCK_SH - 共享锁定(读取的程序)。允许其他进程访问该文件。

  • LOCK_EX - 独占锁定(写入的程序)。防止其他进程访问该文件。

  • LOCK_UN - 释放一个共享锁定或独占锁定

  • LOCK_NBPHP는 파일 잠금에 대해 알고 있나요? 무슨 소용이 있나요?

  • flock() 함수에 대해 간단히 살펴보겠습니다.

flock($file,$lock,$block) 함수는 2개의 필수 매개변수인 $file(잠금/잠금 해제해야 하는 파일 열기) 및 $를 허용합니다. lock(잠금 유형) 및 생략된 매개변수 $block(값이 1 또는 true로 설정되면 파일이 잠길 때 다른 프로세스가 차단될 수 있음). $lock 매개변수는 파일 잠금 유형을 설정하는 데 사용됩니다. 다음 값 중 하나 이상을 설정할 수 있습니다(여러 값은 |로 구분해야 함).

LOCK_SH - 공유 잠금(읽기 프로그램)입니다. 다른 프로세스가 파일에 액세스하도록 허용합니다. LOCK_EX - 배타적 잠금(작성된 프로그램). 다른 프로세스가 파일에 액세스하지 못하도록 합니다.

🎜🎜LOCK_UN - 공유 잠금 또는 배타적 잠금 해제 🎜🎜🎜🎜LOCK_NB - 잠금 시 다른 프로세스를 차단하지 마세요. 🎜🎜🎜🎜그렇습니다. 더 알고 싶다면 여기를 클릭하세요. → →🎜PHP 파일의 기본 조작🎜🎜🎜🎜🎜추천:🎜"🎜PHP 면접 질문 모음(모음)🎜" "🎜php 동영상 튜토리얼🎜"🎜

위 내용은 PHP는 파일 잠금에 대해 알고 있나요? 무슨 소용이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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