Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1149 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Écrire dans un fichier qui est en cours de lecture

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Écrire dans un fichier qui est en cours de lecture

n°2307704
kl14582
Posté le 14-11-2017 à 10:12:23  profilanswer
 

Bonjour,
 
La question : Est-ce gênant de modifier un fichier qui est lu par plusieurs centaines de visiteurs en même temps ?
 
Le contexte :  
Je peux potentiellement recevoir un trafic élevé sur une page (2 000 connectés). Celle-ci est mise en cache mais j'ai un graphique que je souhaite afficher en temps réel (enfin presque, il y a un différé de 5mn). Pour cela, j'utilise un fichier JSON (via parse en jquery) très léger que je mets à jour toutes les 5mn. Le fichier est modifié via PHP et je me demande donc s'il n'y a pas un risque de plantage car au moment où je vais recréer le fichier, il peut y avoir des centaines de personnes connectés qui consultent la page html qui elle-même lis le fichier JSON.
 
Merci d'avance pour vos réponses et bonne journée ;)


Message édité par kl14582 le 14-11-2017 à 19:31:11
mood
Publicité
Posté le 14-11-2017 à 10:12:23  profilanswer
 

n°2307720
rufo
Pas me confondre avec Lycos!
Posté le 14-11-2017 à 13:37:16  profilanswer
 

Normalement, c'est au niveau de l'OS que les pbs d'accès concurrents sont gérés. Après, il me semble qu'il y a moyen, qu'on accès à un fichier de spécifier si on veut le locker ou pas.
A mon avis, je ne pense pas qu'il faille te préoccuper de ça...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2307722
kl14582
Posté le 14-11-2017 à 14:07:39  profilanswer
 

Bonjour Rufo et merci pour ta réponse.
 
Pour le lock, il y a bien la fonction flock() en php mais qui, semble-t-il s'utilise avec fopen. Dans mon cas, la lecture du fichier ne se fera pas en php mais via la fonction parse de Jquery donc j'imagine que Jquery ou JS ne peut pas détecter ce lock.
 
Sinon, j'avais pensé à quelque chose. Juste avant de modifier le fichier JSON, je duplique le fichier. Dans le JS, si le fichier dupliqué existe, je le lis, sinon je lis le fichier JSON d'origine. Ainsi, pendant l'écriture du fichier, le script utilise l'autre fichier.
 
Du coup, je ralenti un peu l'affichage du graphique du fait de tester l'existence du fichier dupliqué à chaque fois mais j'évite un éventuel plantage.
 
Qu'est-ce qui est le mieux ?

n°2307723
rufo
Pas me confondre avec Lycos!
Posté le 14-11-2017 à 14:44:50  profilanswer
 

Encore une fois, je pense pas que tu doives te préoccuper de ce pb bas niveau. Si ton javascript arrive à récupérer le fichier, c'est que l'OS côté serveur a autorisé cette opération. Côté PHP, tu lockes le fichier durant l'écriture. Cela dit, je doute que ça soit utile. L'option "c" de fopen qui permet d'avoir un verrou est arrivée fort tard dans les versions de PHP :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2307727
kl14582
Posté le 14-11-2017 à 15:06:46  profilanswer
 

Oui, je crois que tu as raison. C'est vrai que dans le JS, j'importe les données uniquement si le statut du fichier vaut 200 donc c'est que tout est ok à priori.  
 
Merci à toi pour ton aide Rufo !

n°2307730
Anonymouse
Posté le 14-11-2017 à 15:46:36  profilanswer
 

Le fait que les écritures et les lectures soient ou non atomiques dépend de ton système d'exploitation et des flags passés pour ouvrir le fichier.
 
Je pense donc que tu peux récupérer des données corrompues lorsque ton fichier est MAJ.

n°2307740
kl14582
Posté le 14-11-2017 à 19:13:05  profilanswer
 

Anonymouse a écrit :

Le fait que les écritures et les lectures soient ou non atomiques dépend de ton système d'exploitation et des flags passés pour ouvrir le fichier.
 
Je pense donc que tu peux récupérer des données corrompues lorsque ton fichier est MAJ.


 
Que me conseilles-tu dans mon cas ?
 
Pour résumer :  
OS : Linux
Modification d'un fichier via fopen en PHP (1 seule exécution / 5mn => tache cron)
Lecture du fichier via parse de Jquery (des centaines d'éxécutions / 5mn => internautes)

n°2307743
Anonymouse
Posté le 14-11-2017 à 19:45:15  profilanswer
 

kl14582 a écrit :


 
Que me conseilles-tu dans mon cas ?
 
Pour résumer :  
OS : Linux
Modification d'un fichier via fopen en PHP (1 seule exécution / 5mn => tache cron)
Lecture du fichier via parse de Jquery (des centaines d'éxécutions / 5mn => internautes)


 
Je dirais que:
-Tu peux détecter l'incohérence du fichier (Tu généres un checksum au début du fichier JSON sur le reste du fichier) et si le parsing du JSON échoue OU que le checksum n'est pas bon tu retente ta requête.
-Sinon tu génère le nouveau fichier JSON a coté de l'ancien et tu fais un rename du fichier ancien vers le nouveau, opération qui devrait être atomique sous linux.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Écrire dans un fichier qui est en cours de lecture

 

Sujets relatifs
Re cherche aide HTML pour corriger un fichier[VBA] Lecture fichier texte
Mise en forme Format CSV "*.cxr"[PERL] remplacer un mot dans un fichier
Suppression accents d'un fichier UTF8 [RESOLU]macro qui me renvoie le nom et le chemin d'un fichier
Formulaire d'envoi de fichierSAP SQL Importer un fichier excel
[PRC]Ouvrir un fichier au format PRC? 
Plus de sujets relatifs à : Écrire dans un fichier qui est en cours de lecture


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR