Два пользователя пишут в файл одновременно?(РНР / file_put_contents) - PullRequest
6 голосов
/ 13 января 2011

Если я записываю данные в файл с помощью file_put_contents с установленным флагом FILE_APPEND и два пользователя отправляют данные одновременно, будут ли они добавляться независимо, или есть вероятность, что одна запись будет перезаписана?

Если я установлю флаг LOCK_EX, будет ли вторая отправка ждать завершения первой отправки или данные будут потеряны, если исключительная блокировка не может быть получена?

Как PHP обычно справляется с этим? Я использую версию 5.2.9. если это имеет значение.

Спасибо, Ryan

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Вы также можете проверить функцию flock , чтобы реализовать правильную блокировку (не на основе трюка while / sleep)

1 голос
/ 13 января 2011

Если вы установите эксклюзивную блокировку файла через LOCK_EX, второй сценарий (по времени), который попытается написать, просто вернет false из file_put_contents.

Т.е.: он не будет сидеть и ждать, пока файл станет доступным для записи.

Таким образом, при необходимости вам нужно будет самостоятельно программировать это поведение, возможно, пытаясь использовать file_put_contents ограниченное число раз (например, 3) с использованием подходящего размера * 1008. * сон между каждой попыткой.

...