PHP suporta uma maneira portável de lock arquivos completos em uma advisory way (que significa que todos os programas acessando tem que usar a mesma maneira de locking ou não irá funcionar).
flock() opera em fp, que tem que ser um ponteiro de arquivo aberto com sucesso. operacao é um dos seguintes valores:
Para obter uma lock compartilhada (leitura), use operacao como LOCK_SH (use 1 se a versão do PHP for anterior a 4.0.1).
Para obter uma lock exclusiva (gravação), use operacao como LOCK_EX (use 2 se a versão do PHP for anterior a 4.0.1).
Para retirar uma lock (compartilhada ou exclusiva), use operacao como LOCK_UN (use 3 se a versão do PHP for anterior a 4.0.1).
Se você não quer usar flock() para bloquear enquanto locking, addicione LOCK_NB (3 se a versão do PHP for anterior a 4.0.1) a operacao.
flock() permite que você possa fazer um simples modelo leitura/gravação (reader/writer) que pode ser usado em virtualmente todas as plataformas (incluindo a maior parte dos Unixes e até mesmo Windows). O terceiro argumento opcional é usado como TRUE se a lock iria bloquear (EWOULDBLOCK errno condition)
flock() retorna TRUE em caso de sucesso e FALSE em caso de erro (por exemplo quando uma lock não pode ser obtida).
Atenção |
Na maior parte dos sistemas operacionais flock() é implementada no nível do processo. Quando usando um servidor com um multithreaded API como ISAPI você não pode confiar no flock() para proteger os arquivos contra outros scripts PHP rodando em threads paralelos do mesmo servidor. |