El senario:
Tiene un archivo con una cadena (valor promedio de la oración) en cada línea. Por el bien de los argumentos, digamos que este archivo tiene un tamaño de 1Mb (miles de líneas).
Tiene una secuencia de comandos que lee el archivo, cambia algunas de las cadenas dentro del documento (no solo agrega sino que también elimina y modifica algunas líneas) y luego sobrescribe todos los datos con los nuevos datos.
Las preguntas:
¿El 'servidor' PHP, OS o httpd etc. ya tiene sistemas para detener problemas como este (lectura / escritura a mitad de una escritura)?
Si es así, explique cómo funciona y proporcione ejemplos o enlaces a la documentación relevante.
Si no, ¿hay cosas que puedo habilitar o configurar, como bloquear un archivo hasta que se complete una escritura y hacer que todas las otras lecturas y / o escrituras fallen hasta que el script anterior haya terminado de escribir?
Mis suposiciones y otra información:
El servidor en cuestión ejecuta PHP y Apache o Lighttpd.
Si un usuario llama al script y está a la mitad de la escritura en el archivo y otro usuario lee el archivo en ese momento exacto. El usuario que lo lea no obtendrá el documento completo, ya que aún no se ha escrito. (Si esta suposición es incorrecta, corríjame)
Solo me preocupa la escritura y lectura de PHP en un archivo de texto, y en particular, las funciones "fopen" / "fwrite" y principalmente "file_put_contents". He examinado la documentación de "file_put_contents" pero no he encontrado el nivel de detalle o una buena explicación de lo que es o hace el indicador "LOCK_EX".
El escenario es un ejemplo del peor de los casos en el que asumiría que es más probable que ocurran estos problemas, debido al gran tamaño del archivo y la forma en que se editan los datos. Quiero aprender más sobre estos temas y no quiero o necesito respuestas o comentarios como "use mysql" o "¿por qué está haciendo eso?" Porque no estoy haciendo eso, solo quiero aprender sobre la lectura / escritura de archivos con PHP y no parece estar buscando en los lugares / documentación correctos y sí, entiendo que PHP no es el lenguaje perfecto para trabajar con archivos de esta manera.
file_put_contents()
es solo una envoltura para el fopen()/fwrite()
baile, LOCKEX
hace lo mismo que si llamaras flock($handle, LOCKEX)
.