2010-01-14 3 views
7

사용 : 두 명의 사용자가 동시에 같은 파일을 열려고하면동시 파일 액세스

fopen 
fwrite 
fclose 

은 어떻게됩니까?

+4

정확한 답변이 확실하지 않습니다. 그러나 그렇습니다, 누군가는 이것을 시도했습니다. –

+0

운영 체제에 따라 다름. –

+1

이것은 웹 개발 초기에 MySQL 3.x가 인기를 얻은 이유입니다. –

답변

6

소규모 파일 작업이 매우 빠르기 때문에 동시에 두 번 쓰기가 매우 드뭅니다. 에 관계없이, 파일 잠금 flock를 사용할 수 있습니다 fclose가 자동으로 파일의 잠금을 해제

$fp = fopen('file.log', 'a+'); 
flock($fp, LOCK_EX); 
fwrite($fp, 'my data'); 
flock($fp, LOCK_UN); 
fclose($fp); 

참고하지만, 나는 그것이 코드를 좀 더 사용자 친화적으로 이러한 것들을 넣어하게 찾을 수

+0

+1, 간결한 ... 내 와플 좋아하지 않아! –

+0

만약 인터프리터가 파일을 잠그지 만 잠금을 해제하기 전에 서버가 죽으면 잠금이 해제되지 않습니다. :) – ajsie

+0

@noname - Yup. 잠금 시스템은 종종 이러한 것들을 중재하고, 합의를 이끌어 내고, 대처해야합니다. –

1

예 [flock] 파일을 잠그지 않으면 두 파일을 동시에 열 수 있습니다. 그러나 파일을 모으는 가장 좋은시기는 파일을 쓰거나 파일 한 개만 볼 수있게하려는 경우입니다.

3

중요한이다 : 그들은

  • 을 쓸 때

    1. 무엇 (a)는 읽는 경우 (b)는 (나)는 (가) 글 다음 글을 다음 읽고, 어떻게됩니까됩니까? (a)의 계산은 더 이상 최신 상태에서 파생되지 않아 쓰기가 유효하지 않습니까?

    고전적인 예는 많은 텍스트에 사용 된 Cash machine/bank balance 예입니다.

    어떤 종류의 기록 가능한 상태 같은 mutex 같은 동시 액세스 제어 어떤 형태의 요구를 공유하지만, 잠재적 문제의 톤이있다 같은 race conditions 기아 및 dining philosophers problem에 변화.

    그러나 많은 운영 체제는 어떤 설명의 File locking을 허용합니다. 즉, 다른 프로세스는 잠금이 해제 될 때까지 기다립니다. 또한 ", 체크 아웃, 변경/병합 커밋의"를 사용하는 방법을 수 PHP's flock() for locking a file.

    참조하십시오.

    는 이유에 따라 다음과 같은 같은 MySQL 또는 SQLite 읽기 무거운 또는 캐시가없는 상태를 공유 할 수 보다 빠르고 강력한 방법을 제공하는 데이터베이스를 고려할 수 있습니다.

    수많은 문제, 함정 및 상태 공유 방법이 광범위합니다. 모든 Wikipedia 사용에 사과드립니다.

  • 1

    항상 발생합니다. 그러나 귀하의 질문에 대한 답변은 정확히 두 사람이 원했던/열어 놓은 파일로 무엇을하고 싶은지에 달려 있습니다. 가능한 조치/솔루션은이 요구 사항에 전적으로 의존합니다.

    3

    . FILE_APPEND 또는 LOCK_EX 플래그 대신 file_put_contents()을 사용하십시오.

    이러한 플래그는 파일을 쓰기 위해 잠급니다.

    관련 문제