(PHP 4, PHP 5)
flock — Aviso de bloqueo de archivos portable
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 bloqueo es liberado también por fclose() (el cual es llamado automáticamente cuando el script finaliza).
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á).
Un apuntador de archivo abierto.
operacion es uno de los siguientes valores:
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.
Versión | Descripción |
---|---|
4.0.1 | Las constantes LOCK_XXX fueron agregadas. Antes de esta versión, era necesario usar 1 para LOCK_SH, 2 para LOCK_EX, 3 para LOCK_UN y 4 para LOCK_NB |
Example#1 Ejemplo de flock()
<?php
$aa = fopen("/tmp/bloqueo.txt", "w+");
if (flock($aa, LOCK_EX)) { // realizar un bloqueo exclusivo
fwrite($aa, "Escribir algo aquí\n");
flock($aa, LOCK_UN); // liberar el aviso
} else {
echo "¡No se pudo bloquear el archivo!";
}
fclose($aa);
?>
Note: Los bloqueos con flock() son mandatorios bajo Windows.
Note: 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()).
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).