flock
En esta página
flock
Bloqueo de ficheros portátil y consultivo
Descripción#
flock(resource $stream, int $operation, [int $would_block]): bool
```php
`flock` permite realizar un modelo simple de lectura/escritura que puede usarse en casi cualquier plataforma (incluyendo la mayoría de derivados de Unix e incluso Windows).
El bloqueo también se libera mediante `fclose`, o cuando el `stream` es recolectado por el recolector de basura.
PHP soporta una forma portátil de bloquear ficheros completos de manera consultiva (lo que significa que todos los programas que acceden deben usar el mismo método de bloqueo o no funcionará). Por omisión, esta función bloqueará hasta que se adquiera el bloqueo solicitado; esto puede controlarse con la opción `LOCK_NB` documentada más abajo.
## Parámetros
`stream`
Un puntero al sistema de ficheros de tipo `resource` que típicamente se crea utilizando `fopen`.
`operation`
`operation` es uno de los siguientes:
- `LOCK_SH` para adquirir un bloqueo compartido (lector).
- `LOCK_EX` para adquirir un bloqueo exclusivo (escritor).
- `LOCK_UN` para liberar un bloqueo (compartido o exclusivo).
También es posible añadir `LOCK_NB` como máscara de bits a una de las operaciones anteriores, si `flock` no debe bloquear durante el intento de bloqueo.
`would_block`
El tercer argumento opcional se establece a 1 si el bloqueo bloquearía (condición de error EWOULDBLOCK).
## Valores devueltos
Esta función retorna `true` en caso de éxito o `false` si ocurre un error.
## Ejemplos
Ejemplo de `flock`
`flock` usando la opción `LOCK_NB`
```php
Notas#
[!NOTE]
flockusa bloqueo obligatorio en lugar de bloqueo consultivo en Windows. El bloqueo obligatorio también es compatible en Linux y sistemas operativos basados en System V mediante el mecanismo habitual soportado por la llamada al sistema fcntl(): es decir, si el fichero en cuestión tiene establecido el bit de permiso setgid y el bit de ejecución del grupo desactivado. En Linux, el sistema de ficheros también deberá montarse con la opción mand para que esto funcione.[!NOTE] Dado que
flockrequiere un puntero a fichero, puede que necesite usar un fichero de bloqueo especial para proteger el acceso a un fichero que intente truncar abriéndolo en modo escritura (con un argumento "w" o "w+" afopen).[!NOTE] Solo puede usarse en punteros a ficheros devueltos por
fopenpara ficheros locales, o punteros a ficheros que apunten a flujos en espacio de usuario que implementen el métodostreamWrapper::stream_lock.[!WARNING] Asignar otro valor al argumento
streamen el código posterior liberará el bloqueo.[!WARNING] En algunos sistemas operativos,
flockse implementa a nivel de proceso. ¡Cuando se usa una API de servidor multihilo, puede que no se pueda confiar enflockpara proteger ficheros contra otros scripts PHP que se ejecuten en paralelo en la misma instancia del servidor!
flockno es compatible con sistemas de ficheros anticuados comoFATy sus derivados, y por lo tanto siempre devolveráfalseen estos entornos.[!NOTE] En Windows, si el proceso de bloqueo abre el fichero una segunda vez, no podrá acceder al fichero a través de este segundo manejador hasta que desbloquee el fichero.