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 в случае возникновения ошибки.
Замечание:
Из-за того, что функции flock() необходим указатель
на файл, вам может понадобиться воспользоваться специальным запирающим
файлом для того, чтобы ограничить доступ к файлу, который вы намерены
очищать путём открытыя его в режиме записи (используя "w" или "w+" в
качестве аргумента функции fopen()).
Внимание
flock() не будет работать на NFS и многих других
сетевых файловых системах. Обратитесь к документации вашей операционной
системы для получения дополнительной информации.
В некоторых операционных системах flock() реализован
на уровне процессов. При использовании многопоточных серверных API,
таких как ISAPI, вы не можете полагаться на flock()
для защиты ваших файлов от дугих PHP-скриптов, которые
работают в параллельном потоке на том же сервере!
flock() не поддерживается на старых файловых системах
вроде FAT и его производных, так что всегда будет
возвращать FALSE в этом окружении (это особенно касается пользователей
Windows 98).