Archives quotidiennes :

Fonction PHP exif_read_data et données EXIF erronées

Il peut arriver quand on crée une galerie photo en PHP, ou quand on essaye d’afficher les informations EXIF cachées dans une image ou photographie que nous rencontrions une erreur suite à des données EXIF erronées. Dans le cadre d’un projet du CNAM pour le module NFE114 où je devais réaliser une Photothèque en PHP (cf. le sujet ici), j’ai du afficher une partie des métadonnées EXIF (cf. page Wikipedia) à l’affichage d’une photographie. Je travaillai avec des photographies libres de droits trouvées sur Internet (cf. liens en fin d’article) et j’ai rencontré ce message d’erreur sur une image :

Warning: exif_read_data(20110205224621_11.jpg): Incorrect APP1 Exif Identifier Code in /home/user/workspace/phototheque/picture.php on line 229

En cherchant sur Internet j’ai pu comprendre que ce message pouvait apparaitre quand les métadonnées sont erronées, bien souvent semblerait-il suite à une modification par un logiciel de traitement d’image 😉 J’ai bien cherché une solution qui permettrait de résoudre ce souci mais les données étant erronées et donc non lisibles. la seule solution trouvée est de précéder la fonction PHP  exif_read_data d’un @ afin de masquer le warning. Vous pouvez le constater sur l’exemple de code ci-dessous qui charge les données EXIF dans un tableau.

    //affichage informations EXIF
    $tableau_exif=array();
    //le @ est pour masquer certains warning lors de la lecture d'informations EXIF erronées
    $tableau_exif=@exif_read_data($chemin_photo, 0, true);

Un problème avec cette méthode c’est que nous masquerons aussi les erreurs. Voici donc ci-dessous, suite à une conversation avec un collègue développeur, une solution plus propre :

    $oldErrorLevel = error_reporting();
    error_reporting($oldErrorLevel & ~E_WARNING);
    $tableau_exif = exif_read_data($chemin_photo, 0, true);
    error_reporting($oldErrorLevel);

Comme vous pouvez le constater nous jouons sur le niveau de finesse au niveau des retours de la fonction en masquant les warnings mais en conservant l’affichage des erreurs éventuelles. Une fois la fonction passée nous pouvons revenir dans le mode précédent. A noter que nous pourrions aussi appliquer cette méthode à toute la page au passage en production si nous le souhaitions mais serait-ce le plus sage ? Bon un autre conseil, prévoyez de nombreux tests sur le tableau récolté afin de vous assurer que les clefs de tableau existent, et de même pour les différents contenus que vous souhaitez afficher 🙂

Et ainsi que indiqué en début de post, voici une série de liens, non exhaustive bien sûr, pour obtenir des images libres de droits ou gratuites pour vos différents travaux ou besoins :

http://openphoto.net/
http://imagebase.davidniblack.com/main.php
http://www.photo-libre.fr/
http://photos-free.net/
http://www.freerangestock.com/
http://www.everystockphoto.com/
http://www.gettyimages.fr/

Bonne visite de ces liens en tout cas si l’astuce PHP ne vous est pas utile 😉