Записываю протокол событий вот таким скриптом:
");
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);
Комментариев нет:
Отправить комментарий