PHP | коллективный доступ к файлу



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



flock() - функция ставит в очередь все другие запросы на доступ к файлу до тех пор, пока ваша программа не снимет блокировку. Блокируются только те процессы, которые вызывают эту функцию. Если есть код, который действует напрямую и изменяет файлы, не блокируя их с помощью flock, он всегда сможет обойти блокировку и внести хаос в ваши файлы.

Блокировку следует ставить непосредственно перед внесением изменений в файл и снимать ее сразу же после их внесения.



<?php

$fh = fopen("testfile.txt", 'r+') or die("Сбой открытия файла");

$text = fgets($fh);

if (flock($fh, LOCK_EX))

{

fseek($fh, 0, SEEK_END);

fwrite($fh, "$text") or die("Сбой записи в файл");

flock($fh, LOCK_UN);

}

fclose($fh);

echo "Файл 'testfile.txt' успешно обновлен";

?>