Есть ли риск запуска file_put_contents() в том же файле из разных потоков PHP?
Я знаю file_put_contents(), что очень удобно добавлять данные в файл на PHP. Я хотел бы попробовать использовать PHP threads" to file_put_contents()
в том же файле журнала из разных потоков PHP. Есть ли риск запуска file_put_contents() в том же файле из разных потоков PHP или эти потоки будут успешно блокированы, если файл заблокирован или доступен другим потоком?
EDIT: нашел аналогичный вопрос, который рекомендует flock(), но вопрос о риске, похоже, полностью не рассматривается. Являются ли эти "атомарные" операции записи?
Ответы
Ответ 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);
Когда вы ожидаете, что несколько экземпляров будут записываться в один и тот же файл, вы должны приобрести эксклюзивную блокировку, чтобы другие файлы не могли записывать в файл до тех пор, пока текущий не закончит запись данных