Подтвердить что ты не робот

Есть ли риск запуска file_put_contents() в том же файле из разных потоков PHP?

Я знаю file_put_contents(), что очень удобно добавлять данные в файл на PHP. Я хотел бы попробовать использовать PHP threads" to file_put_contents() в том же файле журнала из разных потоков PHP. Есть ли риск запуска file_put_contents() в том же файле из разных потоков PHP или эти потоки будут успешно блокированы, если файл заблокирован или доступен другим потоком?

EDIT: нашел аналогичный вопрос, который рекомендует flock(), но вопрос о риске, похоже, полностью не рассматривается. Являются ли эти "атомарные" операции записи?

4b9b3361

Ответ 1

как он говорит на странице руководства (что вы дали ссылку для!):

// Write the contents to the file, 
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);

Используйте флаг LOCK_EX для предотвращения двойной записи

Ответ 2

Простой ответ, да. могут произойти столкновения

используйте что-то вроде file_put_contents($location, $data, FILE_APPEND | LOCK_EX);

Когда вы ожидаете, что несколько экземпляров будут записываться в один и тот же файл, вы должны приобрести эксклюзивную блокировку, чтобы другие файлы не могли записывать в файл до тех пор, пока текущий не закончит запись данных