Функции за работа с файловата система
PHP Manual

flock

(PHP 4, PHP 5)

flockПреносимо (portable) съвещателно заключване на файл

Описание

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

flock() позволява да използвате простия модел от тип четене/запис, който практически може да бъде използван на всяка платформа (включително повечето Unix-и и дори Windows).

Заключването се освобождава също и от fclose() (която автоматично се извиква, когато скрипта приключи).

PHP поддържа преносим между платформите начин за съвещателно заключване на цели файлове (което означава, че всички работещи с файла скриптове трябва да използват същия механизъм на заключване иначе съвещателното заключване губи своя смисъл).

Параметри

handle

Указател към отворен файл.

operation

Стойности за operation :

  • LOCK_SH за да придобиете споделено заключване (четящ).
  • LOCK_EX за да придобиете изключително заключване (пишещ).
  • LOCK_UN за да отключите дайла (споделено или изключително).
  • LOCK_NB ако не искате flock() да блокира докато заключва. (не се поддържа под Windows)

wouldblock

Опционалния трети параметър трябва да е 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($fpLOCK_EX)) { // do an exclusive lock
    
fwrite($fp"Записваме нещо тук\n");
    
flock($fpLOCK_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).


Функции за работа с файловата система
PHP Manual