Le Senario:
Vous avez un fichier avec une chaîne (valeur moyenne de la phrase) sur chaque ligne. Pour des raisons d'argument, disons que ce fichier a une taille de 1 Mo (milliers de lignes).
Vous disposez d'un script qui lit le fichier, modifie certaines des chaînes du document (non seulement en ajoutant mais également en supprimant et en modifiant certaines lignes), puis écrase toutes les données par les nouvelles données.
Questions:
Est-ce que «le serveur» PHP, OS ou httpd etc. a déjà des systèmes en place pour arrêter des problèmes comme celui-ci (lecture / écriture à mi-chemin d'une écriture)?
Si tel est le cas, veuillez expliquer comment cela fonctionne et donner des exemples ou des liens vers la documentation pertinente.
Sinon, puis-je activer ou configurer des éléments, tels que le verrouillage d'un fichier jusqu'à la fin d'une écriture et l'échec de toutes les autres lectures et / ou écritures jusqu'à l'écriture du script précédent?
Mes hypothèses et autres informations:
Le serveur en question exécute PHP et Apache ou Lighttpd.
Si le script est appelé par un utilisateur et est à mi-chemin de l'écriture dans le fichier et qu'un autre utilisateur lit le fichier à ce moment précis. L'utilisateur qui le lit n'obtiendra pas le document complet, car il n'a pas encore été écrit. (Si cette hypothèse est fausse, veuillez me corriger)
Je ne m'intéresse qu'à l'écriture et à la lecture de PHP dans un fichier texte, et en particulier aux fonctions "fopen" / "fwrite" et principalement "file_put_contents". J'ai regardé la documentation "file_put_contents" mais je n'ai pas trouvé le niveau de détail ou une bonne explication de ce que le drapeau "LOCK_EX" est ou fait.
Le scénario est un exemple du pire des cas où je suppose que ces problèmes sont plus susceptibles de se produire, en raison de la grande taille du fichier et de la façon dont les données sont modifiées. Je veux en savoir plus sur ces problèmes et je ne veux pas ou n'ai pas besoin de réponses ou de commentaires tels que "utilisez mysql" ou "pourquoi faites-vous cela" parce que je ne fais pas cela, je veux juste en savoir plus sur la lecture / écriture de fichiers avec PHP et ne semblent pas chercher dans les bons endroits / documentation et oui je comprends que PHP n'est pas le langage parfait pour travailler avec des fichiers de cette façon.
file_put_contents()
est juste un emballage pour la fopen()/fwrite()
danse, LOCKEX
fait la même chose que si vous appeliez flock($handle, LOCKEX)
.