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

  FORUM HardWare.fr
  Programmation
  PHP

  tester existance d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tester existance d'un fichier

n°2195497
rantanplan​83
Posté le 26-06-2013 à 10:43:05  profilanswer
 

Bonjour,
Vous pouvez peut-être m'aider, je n'y connais pas grand chose en php, j'ai justes quelques lointaines connaissances en c++.
Voici mon problème, je souhaite afficher sur une page une image d'un autre site, mais dont le nom de fichier change tous les jours à 17h30.
L'image est : http://www.bouches-du-rhone.gouv.f [...] 130626.jpg
 
Vu que la syntaxe du fichier est incorpore la date, l'idée serait de tester en remontant les dates (de septembre à juin) si le fichier existe. Et l'afficher dès qu'il le trouve.
J'ai écrit un peu de code, c'est surement plein d'erreur mais ça donne une base.
Merci si vous arrivez à m'éclairer :)
 

Code :
  1. <?php
  2. $urlbeginning ="http://www.bouches-du-rhone.gouv.fr/files/massif/admin/cartes/feux-"
  3. # début de l'url "http://www.bouches-du-rhone.gouv.fr/files/massif/admin/cartes/feux-20130626.jpg"
  4. for ($filename = 20130930; $filename >=20130901; $filename--)
  5. {
  6.     if (file_exists($urlbeginning . $filename . '.jpg'))
  7.     {
  8.         echo '<img src="$urlbeginning . $filename . '.jpg'">';
  9.         break;
  10.     }
  11.     else for ($filename = 20130831; $filename >=20130801; $filename--)
  12.     {
  13.         if (file_exists($urlbeginning . $filename . '.jpg'))
  14.         {
  15.             echo '<img src="$urlbeginning . $filename . '.jpg'">';
  16.             break;
  17.         }
  18.         else for ($filename = 20130731; $filename >=20130701; $filename--)
  19.         {
  20.             if (file_exists($urlbeginning . $filename . '.jpg'))
  21.             {
  22.                 echo '<img src="$urlbeginning . $filename . '.jpg'">';
  23.                 break;
  24.             }
  25.             else for ($filename = 20130630; $filename >=20130601; $filename--)
  26.             {
  27.                 if (file_exists($urlbeginning . $filename . '.jpg'))
  28.                 {
  29.                     echo '<img src="$urlbeginning . $filename . '.jpg'">';
  30.                     break;
  31.                 }
  32.                 else print ("no file existing" );
  33.             }
  34.         }
  35.     }
  36. }
  37. ?>

mood
Publicité
Posté le 26-06-2013 à 10:43:05  profilanswer
 

n°2195531
rufo
Pas me confondre avec Lycos!
Posté le 26-06-2013 à 15:40:23  profilanswer
 

Plutôt que de faire des for imbriqués comme ça ce qui est horrible, je te suggère plutôt de définir une date min et une date max, puis tu génères toutes les dates entre ces 2 bornes et tu boucles dessus jusqu'à trouver ton fichier.
Fonctions utiles :  
date ("Y-m-01", strtotime($DateMin))
date ("Y-m-t", strtotime($DateMax))
Range()
 
Après, y'a peut-être moyen d'éviter toutes ces recherches si t'as des infos en plus. Ou par ex, si y'a peu de fichiers dans le répertoire à scanner, lister les fichiers ayant le pattern que tu recherches et analyser la fin de leur nom pour trouver le fichier qui t'intéresse...


---------------
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°2195546
dreameddea​th
Posté le 26-06-2013 à 16:41:25  profilanswer
 

Personnellement, j'utiliserai un glob + tri. En effet, je préfère avoir le minimum d'appel système (une bonne pratique).

Code :
  1. $list = glob($urlbeginning.'2013????.jpg');
  2. uasort($list,function($a,$b){ return (-1)*strcmp($a,$b);}); //tri inversé, probablement rajouter l'extraction de la date (regexp, ...) pour être plus "propre"
  3. $first_fiile = $list[0];
  4. ///Checker la date min


Message édité par dreameddeath le 26-06-2013 à 16:46:38
n°2195823
rantanplan​83
Posté le 28-06-2013 à 13:48:32  profilanswer
 

merci pour vos réponses !
Je ne comprends rien aux lignes de code proposées, je vais essayer de piger et je vous dis si ça répond à la question. a+

n°2195825
rantanplan​83
Posté le 28-06-2013 à 13:56:26  profilanswer
 

Une autre solution plus simple serait peut-être de récupérer dans la page http://www.bouches-du-rhone.gouv.fr/files/massif l'URL liée au texte "Afficher la carte dans une nouvelle fenêtre".
Ça ne doit pas être compliqué non ?
En HTML si c'est possible, ou en php. Est-ce qu'une fonction permet cela ?
Merci !!

n°2195897
dreameddea​th
Posté le 28-06-2013 à 18:05:21  profilanswer
 

ouupsss oublie  mon commentaire. J'ai été trop vite, je n'ai pas vu qu'il s'agissait d'appel distant (http). Le glob ne fonctionne que localement (file system local).
 
Mais je n'ai pas compris : tu veux récupérer la "dernière" version c'est ça ?
 
Si c'est le cas, il suffit de prendre le "dernier" 17h30 (en faisant gaffe aux timezone, si nécessaire)
 
Donc tu prends l'heure/minute du "now" (date("Gi" )). Tu compares à 17h30 (ou 18h pour avoir un peu de marge).
 
Si c'est inférieur, tu cherches la date de la veille de type date("Ymd",time()-60*60*24)...
 
Sinon tu prends le jours courant.
 
Pour ce qui est d'aller faire une requête HTML, c'est toujours possible, mais parser le HTML resultant, c'est jamais évident/fiable...

n°2196060
rantanplan​83
Posté le 30-06-2013 à 23:38:13  profilanswer
 

Merci dreameddeath, je crois qu'on s'approche de la solution.
 
si j'ai bien compris le code pour afficher la bonne image serait :
 

Code :
  1. <?php
  2. $nextdate = date("Ymd",time()+60*60*6)       
  3. echo '<img src="http://www.bouches-du-rhone.gouv.fr/files/massif/admin/cartes/feux-' . $nextdate . '.jpg">';
  4. ?>


 
à partir de 18h il donne le fichier du lendemain
NB: les fichiers des jours précédents ne sont pas effacés du serveur


Message édité par rantanplan83 le 30-06-2013 à 23:40:06

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

  tester existance d'un fichier

 

Sujets relatifs
Transformer un fichier .dat en h5Archiver tous les fichiers différents d'un fichier précis
Sortir des infos d'une base MySQL à partir d'un fichier txt ou csvPasser chemin d'un fichier comme variable
Tester si une variable contient des caractèresproblème d'enregistrement ds fichier TMP j'ai besoin d'aide
Tester l'existance d'un fichier sur un montageTester l'existance d'un fichier situé sur un répertoire monté
Tester existance d'un fichierPerl - tester l'existance d'un fichier/repertoire
Plus de sujets relatifs à : tester existance d'un fichier


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