Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

PHP - Запись в файл в многопользовательском режиме

Записываю протокол событий вот таким скриптом:
"); flock($file,3); fclose($file); ?>
Но возникает вопрос: Что будет, если вызовов будет слишком много и со всех сторон? Не выйдет ли, что пока я залочил файл в одном вызове скрипта, другой тоже попытался, ругнулся и ничего не записал? Как предусмотреть это в коде?


Ответ

Функция flock() создает для файла флаг, указывающий на то, что с файлом идет работа. При этом другой скрипт или другая программа, умеющая распознавать подобный флаг, сделает соответствующие выводы и содержимого файла не нарушит.
По умолчанию, данная функция будет ждать получения эксклюзивной блокировки на запись, это поведение можно изменить с помощью параметра LOCK_NB. Если у Вас будет многопоточная запись в файл, то каждый следующий запрос просто будет дольше выполняться из-за наличия блокировки.
Кстати, весь ваш код можно перенести в одну конструкцию:
file_put_contents('track.log', "$trnum \t" . date("Y-m-d h:ia") ."
", LOCK_EX | FILE_APPEND);

Комментариев нет:

Отправить комментарий