es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desbloquear archivo en PHP devuelve verdadero cuando no debería.

En PHP, he creado un bloqueo de consultoría utilizando flock de la siguiente manera:

$fileHandle = fopen($filePath, 'c');
flock($fileHandle, LOCK_EX | LOCK_NB);

Ejecutar el mismo código en otro proceso fallará posteriormente debido a que el bloqueo es exclusivo. Pero el segundo proceso puede ejecutar:

$fileHandle = fopen($filePath, 'c');
flock($fileHandle, LOCK_UN); // devuelve true

El archivo sigue bloqueado, como se confirma al ejecutar un tercer proceso. Entonces, ¿por qué la solicitud de desbloqueo devuelve true?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según la documentación de PHP, llamar a flock() con la bandera LOCK_UN liberará un bloqueo previamente adquirido en el archivo. En este caso, el segundo proceso puede liberar el bloqueo adquirido por el primer proceso a través de la llamada anterior a flock(), incluso si el archivo sigue bloqueado por el primer proceso. Por lo tanto, la llamada devuelve true y el archivo permanece bloqueado por el primer proceso hasta que este libere el bloqueo.

Comments are closed.