|
(PHP 3>= 3.0.7, PHP 4)
flock - переносимое "совещательное/advisory" блокирование файлов.
Описание
bool flock (int fp, int operation [, int &wouldblock])
PHP поддерживает перенос блокированных файлов advisory-способом (что означает, что все программы, выполняющие доступ,
должны использовать тот же способ блокирования, или блокировка работать не будет).
flock() работает с
fp
, который обязан быть открытым указателем на файл.
operation
имеет одно из следующих значений:
-
Для получения shared-блокировки (reader) установите в
operation
значение LOCK_SH (установите 1 в версиях до
PHP 4.0.1).
-
Для получения исключительной/exclusive блокировки (writer) установите в
operation
значение LOCK_EX (установите 2 в версиях до PHP 4.0.1).
-
Для освобождения блокировки (shared или exclusive) установите в
operation
значение LOCK_UN (3 в версиях до PHP 4.0.1).
-
Если вы не хотите, чтобы flock() блокировала, добавьте LOCK_NB (4 в версиях до PHP 4.0.1) в
operation
.
flock() позволяет реализовать простую модель
reader/writer, которая может использоваться на практически любой платформе
(включая большинство клонов Unix и даже Windows). Необязательный третий
аргумент устанавливается в
TRUE
, если блокировка возможна (EWOULDBLOCK errno condition).
flock() возвращает
TRUE
при успехе и
FALSE
при ошибке (например, когда блокировка не может быть получена).
Примечание: поскольку flock() требует указателя на файл, вам может понадобиться использовать специальную
блокировку файла для предотвращения доступа к файлу, который вы намереваетесь усечь в режиме write (с аргументом "w" или "w+" для
fopen()
).
Предупреждение!
|
flock() не будет работать в NFS и многих других сетевых файловых системах. См. в вашей
документации по ОС детальную информацию.
В некоторых ОС flock() реализуется на уровне процесса. При использовании API многопоточного сервера
типа ISAPI вы не сможете рассчитывать на flock() для защиты файлов относительно других PHP-скриптов, запущенных в параллельных
потоках в том же самом экземпляре сервера!
flock() не поддерживается на старинных файловых системах вроде
FAT и их клонах и, следовательно, всегда возвращает
FALSE
в такой среде (это также верно для пользователей
Windows 98).
|
|
|