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?
davy.ai
Según la documentación de PHP, llamar a
flock()
con la banderaLOCK_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 aflock()
, incluso si el archivo sigue bloqueado por el primer proceso. Por lo tanto, la llamada devuelvetrue
y el archivo permanece bloqueado por el primer proceso hasta que este libere el bloqueo.