IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Boucle recherchant les IPTC


Sujet :

Langage PHP

  1. #1
    Gunner4902
    Invité(e)
    Par défaut Boucle recherchant les IPTC
    Bonjour,
    J'ai un soucis avec une boucle qui est censée détecter les IPTC des photos.

    Le principe est le suivant : on refait un array_rand tant que l'IPTC titre n'est pas renseigné dans la photo…

    Les IPTC s'affichent bien quand on fait un affichage classique, il n'y a donc pas de problèmes dans la déclarations des IPTC à priori.

    Le problème est que le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($iptc["2#105"] == false)
     {
       $fi = array_rand($file);
     }
    tourne sans fin…

    J'ai donc voulu tester la boucle en mettant une autre condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($file[$fi]!="test/Nouveau dossier/Alice.jpg")
     {
      $fi = array_rand($file);
     }
    et là, c'est bien toujours la photo de Alice qui est renvoyée…

    N'est-il pas possible de faire une boucle sur les IPTC ?

    Juste pour info, et peut-être pour faire avancer le schmilblick, si je mets le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($iptc as $key => $value)
     {
        echo $key;	
        foreach($value as $innerkey => $innervalue)
        echo $innervalue;
     }
    eh bien j'ai les IPTC du fichier photo qui s'affiche, donc il me semble bien possible de récupérer ces données… alors comment coupler while et $iptc ?

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 712
    Points : 5 335
    Points
    5 335
    Par défaut
    Principe de base de la programmation : Il faut mettre une condition de sortie dans une itération et veiller à ce qu'elle soit vérifiée à l'intérieur de ladite itération

    Tu as la condition de sortie mais jamais tu ne fais quelque chose pour que la condition soit vérifiée.

    Un exemple tout bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $i = 1;
    while ($i<=10){
     echo $i."<br/>";
    }
    =>Boucle infinie !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $i = 1;
    while ($i<=10){
     echo $i."<br/>";
     $i++;
    }
    =>Boucle correcte.

    Le foreach contient déjà les deux dans son en-tête c'est pour ça qu'elle fonctionne

    D'ailleurs puisque cela fonctionne avec foreach pourquoi veux-tu faire une boucle while ?

  3. #3
    Gunner4902
    Invité(e)
    Par défaut
    Citation Envoyé par popo Voir le message
    Principe de base de la programmation : Il faut mettre une condition de sortie dans une itération et veiller à ce qu'elle soit vérifiée à l'intérieur de ladite itération

    Tu as la condition de sortie mais jamais tu ne fais quelque chose pour que la condition soit vérifiée.
    Je m'en suis rendu compte 20 minutes avant de recevoir l'alerte email de ton post. En fait j'avais déclaré GetImageSize une première fois, mais je ne l'avais pas reconduit après l'array_rand…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while($iptc["2#105"]  == false) 
     {
      $fi = array_rand($file);
      $size = GetImageSize("$file[$fi]", &$info);
      $iptc = iptcparse($info["APP13"]);
     }
    Mais je reconnais que je ne suis pas doué en programmation, sinon aux vues des heures que j'y passe, j'aurai déjà du assimiler tout ça ! rire

    Citation Envoyé par popo Voir le message
    D'ailleurs puisque cela fonctionne avec foreach pourquoi veux-tu faire une boucle while ?
    Euh… je ne sais pas… mais bon, afin de continuer à apprendre, je mets le contenu entier de la page web (elle n'est pas longue ), si c'était possible de me dire les erreurs que j'ai faite :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <body>
      <?php
        /*déclaration image et IPTC*/
            $root = "images";
            $folder = scandir($root);
            $folder = array_diff($folder, array(".", "..", "Thumbs.db", "folder.jpg"));
            $fo = array_rand($folder);
            if (ereg(".jpg", $folder[$fo]))
               $file = glob("$root/*.jpg", GLOB_BRACE);
            else
               $file = glob("$root/$folder[$fo]/*.jpg", GLOB_BRACE);
            $fi = array_rand($file);
            $size = GetImageSize("$file[$fi]", &$info);
            $iptc = iptcparse($info["APP13"]);
     
        /*recherche une image ayant un IPTC valide*/
             while($iptc["2#105"]  == false) 
                 {
                    $fi = array_rand($file);
                    $size = GetImageSize("$file[$fi]", &$info);
                    $iptc = iptcparse($info["APP13"]);
                  }
     
         /*renseigne l'IPTC titre*/
             foreach($iptc["2#105"] as $iptc_titre); 
     
         /*prenom (nom fichier)*/
             if (ereg("\(",$file[$fi]))
                 $prenom = preg_replace('`.*/(.+) \(.*`','$1',$file[$fi]);
             else
                 $prenom = preg_replace('`.*/(.+).j.*`','$1',$file[$fi]);
     
         /*affichage*/
              echo utf8_encode("<h1>$prenom</h1><h2>$iptc_titre</h2><img src=\"$file[$fi]\" />");
     
         /*Voir les clés IPTC*/
              // echo "<div style=\"font-size:0.75em;\">IPTC";
              // foreach($iptc as $key => $value)
                 // {
                     // echo "*****<strong>$key</strong> : ";
                     // foreach($value as $innerkey => $innervalue)
                     // echo utf8_encode("$innervalue");
                  // }
              // echo "</div>";
     ?>
    </body>

Discussions similaires

  1. Rechercher les element d'une liste dans une autre liste
    Par fessebleu dans le forum Langage
    Réponses: 30
    Dernier message: 24/04/2006, 21h23
  2. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56
  3. Ne pas rechercher les imprimantes partagées ???
    Par svil dans le forum Windows XP
    Réponses: 1
    Dernier message: 18/11/2005, 05h21
  4. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13
  5. Rechercher les occurences commencant par un chiffre
    Par tony slayer dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/05/2005, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo