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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2204637
F22Raptor
Tête en l'air ...
Posté le 30-09-2013 à 11:14:49  profilanswer
 

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
mood
Publicité
Posté le 30-09-2013 à 11:14:49  profilanswer
 

n°2204638
flo850
moi je
Posté le 30-09-2013 à 11:25:50  profilanswer
 

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


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

n°2204649
F22Raptor
Tête en l'air ...
Posté le 30-09-2013 à 11:55:11  profilanswer
 

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
n°2204650
flo850
moi je
Posté le 30-09-2013 à 11:56:24  profilanswer
 

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

Spoiler :

comme d'autres choses...


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


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

n°2204665
F22Raptor
Tête en l'air ...
Posté le 30-09-2013 à 13:37:42  profilanswer
 

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
n°2204673
flo850
moi je
Posté le 30-09-2013 à 14:10:46  profilanswer
 

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


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

n°2204676
F22Raptor
Tête en l'air ...
Posté le 30-09-2013 à 14:43:41  profilanswer
 

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
n°2204681
flo850
moi je
Posté le 30-09-2013 à 15:10:43  profilanswer
 

je pense que les deux solutions sont équivalentes


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

n°2204682
F22Raptor
Tête en l'air ...
Posté le 30-09-2013 à 15:15:53  profilanswer
 

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
n°2204694
flo850
moi je
Posté le 30-09-2013 à 15:41:28  profilanswer
 

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


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

mood
Publicité
Posté le 30-09-2013 à 15:41:28  profilanswer
 

n°2204855
F22Raptor
Tête en l'air ...
Posté le 01-10-2013 à 11:46:18  profilanswer
 

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
n°2205767
thalasso
Posté le 07-10-2013 à 17:14:27  profilanswer
 

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

n°2205823
F22Raptor
Tête en l'air ...
Posté le 07-10-2013 à 22:10:24  profilanswer
 

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

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

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

 

Sujets relatifs
fichier audio grâce à formulaire Access et Media PlayerPatrons pour détecter les titres et les sous tires d'un fichier texte
Suppression d'un fichier sur le réseau par commande dosOuvrir un fichier Excel (vba)
Créer un fichier et l'envoyer en vbaInclure en php un texte contenu dans un fichier dropbox
convertir un fichier image raw en format lisible[Excel] Copier le contenu de plusieurs fichier Excel dans un seul
Je souhaite une macro qui ouvre un fichier excel. Résolu MerciFixer le nombre de caractères par ligne d'un fichier
Plus de sujets relatifs à : vérifier si un fichier a été modifié


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