2011-01-13 2 views
6

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

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

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

Спасибо, Райан

ответ

2

можно также проверить функцию flock осуществлять надлежащую блокировку (не на основе в то время как/трюк сна)

+0

Не так ли действует модификатор LOCK_EX ? –

+0

Как говорится в руководстве: «По умолчанию эта функция блокируется до тех пор, пока не будет получена запрошенная блокировка, это может контролироваться (на платформах, отличных от Windows), с опцией LOCK_NB, описанной ниже». Поэтому, если LOCK_EX немедленно возвращается с ошибкой, это не то же поведение – Ass3mbler

+0

Cool - звучит так, как это происходит после OP. +1 от меня. :-) –

1

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

i.e .: Он не будет сидеть и ждать, пока файл станет доступен для записи.

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

+1

Вам потребуется запустить 'while' и' sleep' после 'file_exists' проверьте, в состоянии дождаться разблокировки – RobertPitt

+0

Как насчет вопроса №1 ... если бы я не использовал блокировку, что бы произошло? – NightHawk

+0

@RobertPitt - Обновлял мой ответ в этих строках. Хороший запрос на проверку файла file_exists. :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^