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