Je ne travaille actuellement qu'avec des fichiers en texte brut.
Suggestion 1. Utilisez une base de données.
Suggestion 2. Utilisez un fichier de verrouillage. Utilisez les appels d'API au niveau du système d'exploitation pour ouvrir un fichier avec un verrou exclusif . Le premier utilisateur à acquérir ce fichier a un accès exclusif aux données. Lorsque cet utilisateur termine sa transaction, fermez le fichier, libérez le verrou au niveau du système d'exploitation.
Suggestion 3. Ne pas "mettre à jour" le fichier. Enregistrez l'historique des modifications. Vous pouvez ensuite lire les noms d'utilisateur et les horodatages du journal pour trouver la dernière version.
Si vous faites cela, vous devez faire à chaque demande quelque chose comme ceci.
Lors de l'obtention de l'état actuel, lisez la dernière ligne du fichier. En outre, obtenez la taille du fichier et la dernière modification. Conservez la taille et la dernière heure de la session. Afficher l'état actuel dans le formulaire.
Lorsque la modification de l'utilisateur est en cours de traitement, vérifiez la taille du fichier et l'heure de la dernière modification. Si le fichier est différent de ce qui a été enregistré dans la session, cet utilisateur tente de mettre à jour les données qui ont été modifiées par quelqu'un d'autre. Lire la dernière ligne du fichier. En outre, obtenez la taille du fichier et la dernière modification. Conservez la taille et la dernière heure de la session. Afficher l'état actuel dans le formulaire.
En outre, vous souhaiterez peut-être avoir deux fichiers. L'un avec des données "actuelles", l'autre avec l'historique des changements. Cela peut rendre plus rapide la recherche des données actuelles, puisque c'est le seul enregistrement dans le fichier d'état actuel. Un autre choix consiste à avoir un "en-tête" dans votre fichier qui est un bloc de texte de taille fixe. Chaque fois que vous ajoutez, vous aussi seek(0,0)
et actualisez l'en-tête avec le décalage au dernier enregistrement ainsi que l'horodatage de la dernière modification.
Lecture recommandée: [Concurrency] (http://www.brainbell.com/tutors/php/php_mysql/Transactions_and_Concurrency.html) (c'est pour les bases de données, mais toujours applicable ici). Celui-ci est appelé le problème de "mise à jour perdue". – NullUserException