Bonjour,

je suis actuellement en cour de développement d'un script de mise à jour pour mon portail immobilier.
J'ai réaliser un partenariat avec une grosse société éditrice d'un des plus gros logiciel immobilier.

Tous les soirs je reçois un fichier xml contenant le flux d'annonce.

Mais voila je rencontre un problème au moment de traiter les images.
J'utilise la fonction PHP copy() pour les récupérer et donc les gérer en interne.
J'exécute avant une autre fonction vérifiant si elle existe bien sur le serveur distant.
Mais cette opération est longue, vraiment trop longue (~1h pour traiter 1000 annonces, et le fichier en contient plus de 24000...)

voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// extrait du parsage du xml
// Parcours des differentes photos d'un bien
   foreach    ($annonce->liste_photos->children() as $photo) {
      $urlPhoto = (string)$photo;
 
      // On ne garde que 9 photos
      if($nbPhotos <= 9) {
         // Le lien vers la photo est-il valide ?
         if(is_image_existe($urlPhoto)) {
            $nbPhotos++;
 
            // On recupere le nom de fichier de la photo
            $urlPhotoParts = pathinfo($urlPhoto);
            $nomPhoto = $urlPhotoParts['basename'];
 
            // La photo est-elle presente sur le serveur ?
            if (array_key_exists($nomPhoto, $liste_photos_store)) {
               unset($liste_photos_store[$nomPhoto]);
            }
            else {
               // L'image n'existe pas sur le serveur, on la copie
               copy($urlPhoto, 'images/'.$nomPhoto);
               $array_photo_maj[$nomPhoto] = 1;
            }
 
            $photos[] = ID_AGENT.'/'.$nomPhoto;
         }
      }
   }
$array_key_exists est un tableau regroupant les photo déjà présente dans mon système. Cette vérification me permet de copier que les nouvelles photo

Cette fonction me permet de vérifier l'existance d'un fichier distant et notamment l'image dans mon cas. Sans cette fonction la copy() perd trop de temps s'il s'agit d'une images inexistante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
function is_image_existe($url) {
   ini_set('allow_url_fopen', '1');
 
   if (@fclose(@fopen($url, 'r'))) {
      return true;
   } else {
      return false;
   }
}
J'ai également des pistes par rapport à la localisation des images, j'ai l'impression que le contenu du dossier parent est accessible.
En effet quand j'ai "bidouiller" l'url de l'image (ex : http://photos.bestlogicielimmo.com/3...49348760_9.jpg) je remarque que j'obtiens toutes les images de l'agence 34093dans mon navigateur donc je me dit qu'elles sont surement accessible autrement et donc un traitement par lot serait peut être plus propice..


Merci d'avance

Couss