Рассмотренные выше скрипты осуществляют запись в файл в предположении, что скрипт владеет файлом единолично, но при записи в файл одновременно несколькими пользователями могут возникать конфликтные ситуации, приводящие к разрушению информации в файле.
Третий необязательный параметр wouldblock устанавливается в true, если файл, к которому происходит обращение, уже блокирован другим скриптом.
Функцию flock () следует вызывать сразу после открытия файла для установки блокировки и непосредственно перед закрытием файла для снятия блокировки. Пример - в листинге 6.37.
В реальных Web-приложениях необходимы более сложные схемы блокировки файлов. Так при добавлении записи в файловый вариант гостевой книги, чата или счетчика посещений, если файл заблокирован предыдущей операцией, информация будет потеряна, поэтому следует организовывать цикл ожидания, как это продемонстрировано в листинге 6.38.
B листинге представлена функция work_with_fiie(), которая в качестве первого параметра $fiiename принимает имя файла, а в качестве второго параметра $str- информацию, которую необходимо дописать в файл. При этом блокировка файла осуществляется в цикле: при неудачной попытке заблокировать файл происходит задержка выполнения программы с помощью функции sleep о, которая принимает единственный параметр- время задержки в секундах.