2011-01-13 3 views
6

FILE_APPEND 플래그가 설정된 file_put_contents을 통해 파일에 데이터를 쓰고 동시에 두 명의 사용자가 데이터를 제출하면 관계없이 추가 할 것인가 또는 한 항목을 덮어 쓸 수 있습니까?두 명의 사용자가 동시에 파일에 기록합니까? (PHP/file_put_contents)

플래그를 LOCK_EX 플래그로 설정하면 두 번째 제출은 첫 번째 제출이 완료 될 때까지 대기 할 것인가 독점 잠금을 얻을 수없는 경우 데이터가 손실됩니까?

PHP는 일반적으로 어떻게 처리합니까? 버전 5.2.9를 실행 중입니다. 그게 중요하다면.

감사합니다, 라이언

답변

2

당신은 또한 적절한 잠금을 구현하기 위해 flock 기능을 확인할 수 있습니다

+0

LOCK_EX 한정자가 수행하는 효과가 아닙니까? ? –

+0

설명서에 "기본적으로이 기능은 요청 된 잠금을 얻을 때까지 차단되며, 아래에 설명 된 LOCK_NB 옵션을 사용하여 Windows 이외의 플랫폼에서 제어 할 수 있습니다." 따라서 LOCK_EX가 오류와 함께 즉시 반환되면 동일한 동작이 아닙니다. – Ass3mbler

+0

멋진 소리는 OP가 정확히 무엇인지와 같습니다. +1. :-) –

1

당신이 LOCK_EX를 통해 독점 파일 잠금을 설정하면, 쓰기를 시도 두 번째 스크립트 (시간이 많다는가) 단순히 file_put_contents를에서 false를 반환합니다.

예 : 파일을 쓸 수있게 될 때까지 기다리지 않습니다.

이에 따라, 그래서 필요한 경우 아마도 file_put_contents를 여러 번의 제한 번호를 사용을 시도하여,이 동작 자신을 프로그래밍해야합니다 (예를 들어 : 3) 각 시도 사이의 sleep의 적절한 크기의 사용과 함께.

+1

당신은 실행해야합니다 (반면/수면 트릭을 기반으로하지 않음)'while'과가'로 확인 file_exists' 후'sleep' 잠금 해제를 기다릴 수 있습니다 – RobertPitt

+0

질문 # 1은 무엇입니까 ... 내가 자물쇠를 사용하지 않으면 어떻게 될까요? – NightHawk

+0

@RobertPitt -이 줄을 따라 내 대답을 업데이트하고있었습니다. 선불 file_exists 체크에 좋은 전화. :-) –

관련 문제