(PHP 4, PHP 5)
flock — Преносимо (portable) съвещателно заключване на файл
flock() позволява да използвате простия модел от тип четене/запис, който практически може да бъде използван на всяка платформа (включително повечето Unix-и и дори Windows).
Заключването се освобождава също и от fclose() (която автоматично се извиква, когато скрипта приключи).
PHP поддържа преносим между платформите начин за съвещателно заключване на цели файлове (което означава, че всички работещи с файла скриптове трябва да използват същия механизъм на заключване иначе съвещателното заключване губи своя смисъл).
Указател към отворен файл.
Стойности за operation :
Опционалния трети параметър трябва да е TRUE ако ще блокира (състояние за грешка EWOULDBLOCK).
Връща TRUE при успех или FALSE при неуспех.
Версия | Описание |
---|---|
4.0.1 | Бяха добавени константите LOCK_XXX. Преди трябваше да използвате 1 за LOCK_SH, 2 за LOCK_EX, 3 за LOCK_UN и 4 за LOCK_NB |
Example #1 Пример за flock()
<?php
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // do an exclusive lock
fwrite($fp, "Записваме нещо тук\n");
flock($fp, LOCK_UN); // release the lock
} else {
echo "Не мога да заключа файла!";
}
fclose($fp);
?>
Забележка: flock() задължително заключва под Windows.
Забележка: Тъй като flock() изисква подаването на файлов манипулатор може да се наложи да използвате допълнителен файл за заключване с който да защитите достъпа до файл, който искате изрежете (truncate) чрез отварянето му в режим за запис (с параметър "w" или "w+" към fopen()).
Функцията flock() няма да работи под NFS и много други мрежови файлови системи. Проверете в документацията на операционната система за повече информация.
При някои операционни системи flock() е реализирана на ниво процес. При използването на многопроцесни сървърни приложни интерфейси като ISAPI не можете да разчитате със сигурност, че flock() ще защити файловете от други PHP скриптове, които работят в паралелни нишки на същата инстанция на сървъра.
flock() не се поддържа при стари файлови системи като FAT и нейните производни и ще връща винаги FALSE, когато работи в това обкръжение (това да го имат предвид най-вече потребителите, които са с Window 98).