Функция PHP flock

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

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

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

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

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

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

Пример использования функции 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).