Forum und email

flock

(PHP 4, PHP 5)

flock — Aviso de bloqueo de archivos portable

Descripción

bool flock ( resource $gestor , int $operacion [, int &$bloquearia ] )

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á).

Lista de parámetros

gestor

Un apuntador de archivo abierto.

operacion

operacion es uno de los siguientes valores:

  • LOCK_SH para adquirir un bloqueo compartido (lectura).
  • LOCK_EX para adquirir un bloque exclusivo (escritura).
  • LOCK_UN para liberar un bloqueo (compartido o exclusivo).
  • LOCK_NB si no desea que flock() bloquee las operaciones de entrada/salida mientras esté activo. (no soportado en Windows)

bloquearia

El tercer argumento opcional recibe el valor TRUE si el aviso produciría un bloqueo (la condición EWOULDBLOCK).

Valores retornados

Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.

Registro de cambios

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

Ejemplos

Example#1 Ejemplo de flock()

<?php

$aa 
fopen("/tmp/bloqueo.txt""w+");

if (
flock($aaLOCK_EX)) { // realizar un bloqueo exclusivo
    
fwrite($aa"Escribir algo aquí\n");
    
flock($aaLOCK_UN); // liberar el aviso
} else {
    echo 
"¡No se pudo bloquear el archivo!";
}

fclose($aa);

?>

Notes

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()).

Warning

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).