filetype
fnmatch
Файловая система
PHP Manual

# flock

(PHP 4, PHP 5)

flock — Портируемое рекомендательное запирание файлов

### Описание

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

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

> Замечание: flock() является обязательным под Windows.

flock() применяется к `handle` , который должен быть указателем на открытый файл. Параметр `operation` может принимать следующие значения:

- Чтобы установить общее запирание (чтение), установите `operation` в значение `LOCK_SH` (или 1, в случае версии PHP ниже 4.0.1).
- Чтобы установить эксклюзивное запирание (запись), установите `operation` в значение `LOCK_EX` (или 2, в случае версии PHP ниже 4.0.1).
- Чтобы отпереть файл (после общего или эксклюзивного запирания), установите `operation` в значение `LOCK_UN` (или 3, в случае версии PHP ниже 4.0.1).
- Если вы не хотите, чтобы flock() блокировал файл при запирании, добавьте `LOCK_NB` (или 4, при использовании версии PHP ниже 4.0.1) к параметру `operation` .

flock() позволяет вам реализовывать простую модель чтения/записи, которая может быть использована практически на любой платформе (включая большинство проивзодных от Unix платформ, и даже Windows). Необязательный третий аргумент устанавливается в `TRUE`, если запирание также блокирует (код ошибки EWOULDBLOCK). Блокировка снимается при помощи этой же функции fclose() (которая также автоматически вызывается при завершении выполнения скрипта).

Возвращает `TRUE` в случае успешного завершения или `FALSE` в случае возникновения ошибки.

Пример #1 Пример использования функции flock()

`<?php
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // выполнить эксплюзивное запирание
fwrite($fp, "Что-нибудь пишем\n");
flock($fp, LOCK_UN); // отпираем файл
} else {
echo "Не могу запереть файл !";
}
fclose($fp);
?>`

> Замечание: Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать путём открытыя его в режиме записи (используя "w" или "w+" в качестве аргумента функции fopen()).

Внимание

flock() не будет работать на NFS и многих других сетевых файловых системах. Обратитесь к документации вашей операционной системы для получения дополнительной информации.

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

flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать `FALSE` в этом окружении (это особенно касается пользователей Windows 98).

filetype
fnmatch
Файловая система
PHP Manual