vérifier si un fichier a été modifié

vérifier si un fichier a été modifié - PHP - Programmation

Marsh Posté le 30-09-2013 à 11:14:49    

Hello
Je récupère actuellement des données depuis un fichier XML fournit par un tiers (le contenu du fichier peut changer à tout moment), et les affiche dans une page web.
L’ouverture de ce fichier XML (assez volumineux), et la récup des infos à l’intérieur, prennent un temps assez long, qui ralentit l’affichage de la page (6 à 8 secondes).
 
Je réfléchis à la solution suivante : vérifier le timestamp du fichier XML (avec filemtime), et le comparer au dernier que je stockerai par ailleurs.  S’il n’a pas changé, pas besoin de tout relire.
Je pense avoir deux sous-solutions pour cela :
• Stocker le timestamp précédent dans un fichier texte (timestamp.txt) : pour comparer, j’ouvre et je lis le contenu
• Stocker le timestamp précédent comme nom du fichier texte : pour savoir si ça a été modifié, je fais un file_exists avec comme nom le nouveau timestamp du fichier XML
 
D’après vous, une de ces deux solutions est préférable à l’autre ? (rapidité, autre ?)
 
Merci !   :jap:


Message édité par F22Raptor le 30-09-2013 à 11:15:12

---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 30-09-2013 à 11:14:49   

Reply

Marsh Posté le 30-09-2013 à 11:25:50    

tu fais une requete de type HEAD vers le fournisseur, ça te donnera normalement le last-modified , donc tu pourra comparer sans avoir a le télécharger
 
Ensuite ça me semble typiquement le genre d'info que je garderai en mémoire dans un cache APC  
 
Enfin, je séparerai ton process en deux partie :  

  • un qui va chercher le fichier, et le digère (puis stocke ces infos digérées en ram ou en base)
  • un qui affiche les dernieres infos dispos


comme ça la page s'affiche toujours immédiatement


---------------

Reply

Marsh Posté le 30-09-2013 à 11:55:11    

Wow ! :D
Tant de mots que je ne connais (newbie inside !)
 
Je vais creuser un peu le truc, mais ça me paraît loin de mes compétences.


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 30-09-2013 à 11:56:24    

les compétences, ça s'élargit :o

Spoiler :

comme d'autres choses...


 
Une page qui mets plusisuers seconde a charger, c'est mal


---------------

Reply

Marsh Posté le 30-09-2013 à 13:37:42    

Comme dit le proverbe :
Ceux qui ont le talent iront loin, très loin, mais jamais aussi loin que ceux qui n'en ont pas mais qui bossent beaucoup  :o
(et contre ceux qui ont le talent et qui bossent, tu ne pourras jamais rien faire).
 
Blague à part, en attendant que j'élargisse mes compétences ([:ekinox06210]), mes soluces du premier post te paraissent améliorer le truc ?
 
Si je comprends bien, ta requête HEAD évite de charger le fichier sous-jacent : est-ce à dire que la fonction Filemtime est en fait longue à exécuter ?


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 30-09-2013 à 14:10:46    

le fichier XML tu le télécharge ? Si oui, la fonction head te permet de ne le télécharegr que l'entete ( mais ça c'est la dernièrer optimisation a faire)  
 
Filemtime n'est pas couteuse a executer si tu as le fichier sous la main


---------------

Reply

Marsh Posté le 30-09-2013 à 14:43:41    

en fait j'ai l'adresse http://www.machin.com/bidule.xml
L'idée serait de vérifier au lancement de la page le filemtime de bidule.xml
 
S'il est le même que celui que j'ai archivé à la dernière consultation, on ne télécharge pas le XML.
Sinon, on télécharge et on lit les infos.
 
Du coup, s'il y a 2 éditions du XML par jour, et que ma page est consultée 30 fois par jour : plutôt que de charger les infos 30 fois, je ne les chargerais que deux fois.
Ces deux fois seront aussi longue que maintenant, mais les 28 autres seront rapides.
 
 
Mon interrogation initiale était : comment dois-je archiver le filemtime ?  Vaut-il mieux le placer (sur mon espace chez l'hébergeur) dans le contenu d'un fichier TXT, ce qui oblige à ouvrir le fichier pour lire le contenu.
Ou n'est ce pas plus malin de nommer un fichier avec le filemtime, et au chargement suivant, vérifier l'existence (file_exists) d'un fichier nouveau_filemtime.TXT
Si le fichier existe, alors pas de download.
Sinon, renommer le fichier avec le nouveau filemtime, et traiter le XML (ce qui prend donc du temps, mais ce ne sera que 2 fois par jour)


Message édité par F22Raptor le 30-09-2013 à 14:47:03

---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 30-09-2013 à 15:10:43    

je pense que les deux solutions sont équivalentes


---------------

Reply

Marsh Posté le 30-09-2013 à 15:15:53    

flo850 a écrit :

je pense que les deux solutions sont équivalentes


:jap:
je vais déjà m'intéresser à ça dans l'urgence, et j'enquêterai tranquillement sur HEAD et cache APC.


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 30-09-2013 à 15:41:28    

Par ordre de gain decroissant :  
decoupler récupération ( par un cron ) et affichage des données ( histoire de ne plus avoir ces 2s de chargement)
mettre en cache l'extraction des infos du XML
Ne récuperer le fichier que si c'est vraiment obligatoire


---------------

Reply

Marsh Posté le 30-09-2013 à 15:41:28   

Reply

Marsh Posté le 01-10-2013 à 11:46:18    

filemtime et stat ne fonctionnent pas [:sisicaivrai]


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 07-10-2013 à 17:14:27    

pour la perf pure, je plutot de convertir l'xml en array ou en  objet php.... puis le stocke en cache avec var_export... 6 à 8 secondes pour lire un xml c'est trop long

Reply

Marsh Posté le 07-10-2013 à 22:10:24    

thalasso a écrit :

pour la perf pure, je plutot de convertir l'xml en array ou en  objet php.... puis le stocke en cache avec var_export... 6 à 8 secondes pour lire un xml c'est trop long


pas tout compris : Syntax Error dans la phrase   :D


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed