such - fopen php
¿Existe algún riesgo al ejecutar file_put_contents() en el mismo archivo desde diferentes subprocesos de PHP? (2)
Sé que file_put_contents() hace que sea muy fácil agregar datos a un archivo en PHP. Me gustaría intentar usar los " threads " de PHP para file_put_contents()
en el mismo archivo de registro de diferentes hilos de PHP. ¿Existe algún riesgo al ejecutar file_put_contents () en el mismo archivo desde diferentes subprocesos de PHP o estos se bloquearán si el archivo está bloqueado o si otro subproceso accede a él?
EDITAR: Encontró una pregunta similar que recomienda flock() , pero la pregunta de riesgo no parece ser completamente abordada. ¿Son estas operaciones de escritura "atómica"?
Respuesta simple, sí. pueden ocurrir choques
use algo como file_put_contents($location, $data, FILE_APPEND | LOCK_EX);
Cuando espera que varias instancias escriban en el mismo archivo, debe adquirir un bloqueo exclusivo para que ningún otro proceso pueda escribir en el archivo hasta que el actual haya terminado de escribir sus datos.
como dice en la página del manual (¡para el que le diste un enlace!):
// Write the contents to the file,
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
Utilice el indicador LOCK_EX
para evitar escrituras dobles