(PHP 3>= 3.0.7, PHP 4 , PHP 5)
flock -- Aviso de bloqueo de archivos portable
Descripción
bool
flock ( resource gestor, int operacion [, int &bloquearia])
PHP soporta una manera portable de bloquear archivos enteros de
por medio de avisos (lo que quiere decir que todos los programas
que acceden al archivo deben usar el mismo mecanismo de bloqueo,
o no funcionará).
Nota:
flock() es obligatorio bajo Windows.
flock() opera sobre
gestor, que debe ser un apuntador a un
archivo abierto. operacion es uno de los
siguientes valores:
Para adquirir un bloqueo compartido (de lectura), defina
operacion a
LOCK_SH (o use 1 antes de PHP 4.0.1).
Para adquirir un bloqueo exclusizo (de escritura), defina
operacion a
LOCK_EX (o use 2 antes de PHP 4.0.1).
Para liberar un bloqueo (compartido o exclusivo), defina
operacion a
LOCK_UN (o use 3 antes de PHP 4.0.1).
Si no desea que flock() bloquee mientras
opera, agregue LOCK_NB (4 antes de PHP
4.0.1) a operacion.
flock() le permite ejecutar un modelo de
lectura/escritura simple que puede ser usado en
prácticamente cualquier plataforma (incluyendo la
mayoría de derivaciones de Unix e incluso Windows). El
tercer argumento opcional recibe el valor TRUE si el aviso
produciría un bloqueo (la condición EWOULDBLOCK)
Devuelve TRUE si todo se
llevó a cabo correctamente, FALSE en caso
de fallo.
Ejemplo 1. Ejemplo de flock()
<?php
$aa = fopen("/tmp/bloqueo.txt", "w+");
if (flock($aa, LOCK_EX)) { // realizar un bloqueo exclusivo fwrite($aa, "Escribir algo aqui\n"); flock($aa, LOCK_UN); // liberar el aviso } else { echo "¡No se pudo bloquear el archivo!"; }
fclose($aa);
?>
|
|
Nota:
Dado que flock() requiere un apuntador de
archivo, puede que necesite usar un archivo especial de bloqueo
para proteger el acceso a un archivo que pretende truncar
abriéndolo en modo de escritura (con un argumento "w" o
"w+" a fopen()).
| Aviso |
flock() no trabajará sobre NFS y
muchos otros sistemas de archivos en red. Revise la
documentación de su sistema operativo para más
detalles.
En algunos sistemas operativos flock() se
implementa al nivel de proceso. Cuando usa una API de servidor
multi-hilos como ISAPI, ¡es posible que no pueda depender
en flock() para proteger archivos contra
otros scripts PHP corriendo en hilos paralelos en la misma
instancia de servidor!
flock() no es soportado en sistemas de
archivos anticuados como FAT y sus derivados,
y por lo tanto siempre devolverá FALSE bajo tales
entornos (esto es especialmente cierto para usuarios de Windows
98).
|