2011-01-13 16 views
6

Jeśli zapisuję dane do pliku przez file_put_contents z zestawem flag FILE_APPEND i dwóch użytkowników przesyła dane w tym samym czasie, czy będzie on dołączany niezależnie, czy jest szansa, że ​​jeden wpis zostanie nadpisany?Dwóch użytkowników pisze do pliku w tym samym czasie? (PHP/file_put_contents)

Jeśli ustawię flagę LOCK_EX, czy drugie zgłoszenie będzie czekać na zakończenie pierwszego zgłoszenia, czy też dane zostaną utracone, gdy nie będzie można uzyskać blokady wyłącznej?

W jaki sposób PHP na ogół to obsługuje? Używam wersji 5.2.9. jeśli to ma znaczenie.

Dzięki Ryan

Odpowiedz

2

można również sprawdzić działanie flock wdrożyć właściwą blokujący (nie oparte na czas/uśpienia podstęp)

+0

Czy to nie działa, że ​​modyfikator LOCK_EX robi ? –

+0

Zgodnie z instrukcją: "Domyślnie ta funkcja będzie blokowana do momentu uzyskania żądanej blokady, która może być kontrolowana (na platformach innych niż Windows) z opcją LOCK_NB udokumentowaną poniżej". Więc jeśli LOCK_EX natychmiast wraca z błędem, to nie jest to samo zachowanie. – Ass3mbler

+0

Cool - brzmi to dokładnie to, co PO jest po. +1 ode mnie. :-) –

1

Jeśli ustawisz wyłączną blokadę plików poprzez LOCK_EX, drugi skrypt (czas-mądry), który próbuje pisać po prostu return false z file_put_contents.

tj. Nie będzie siedzieć i czekać, aż plik stanie się dostępny do zapisu.

Jako takie, jeśli jest to wymagane trzeba programować w tym zachowania siebie, być może próbując użyć file_put_contents się ograniczoną ilość razy (np .: 3) o odpowiedniej wielkości wykorzystania sleep pomiędzy każdą próbę.

+1

Trzeba by uruchomić 'while' i' sleep' po 'file_exists' sprawdzić się mogę czekać na odblokowanie – RobertPitt

+0

Co z pytaniem nr 1 ... gdybym nie użył zamka, co by się stało? – NightHawk

+0

@RobertPitt - Aktualizowałem moją odpowiedź zgodnie z tymi liniami. Dobre wywołanie z góry sprawdzanie file_exists. :-) –

Powiązane problemy