tester existance d'un fichier

tester existance d'un fichier - PHP - Programmation

Marsh Posté le 26-06-2013 à 10:43:05    

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. ?>

Reply

Marsh Posté le 26-06-2013 à 10:43:05   

Reply

Marsh Posté le 26-06-2013 à 15:40:23    

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
Reply

Marsh Posté le 26-06-2013 à 16:41:25    

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
Reply

Marsh Posté le 28-06-2013 à 13:48:32    

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+

Reply

Marsh Posté le 28-06-2013 à 13:56:26    

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 !!

Reply

Marsh Posté le 28-06-2013 à 18:05:21    

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...

Reply

Marsh Posté le 30-06-2013 à 23:38:13    

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
Reply

Sujets relatifs:

Leave a Replay

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