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 :

Affichage non correct d'une image


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Affichage non correct d'une image
    Bonjour,

    Afin de permettre la lecture d'images sauvegardées dans un repertoire non accessible publiquement, j'utilise la technique (classique) suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<img src=\"image.php?p=$chemin\" width=".$width." height=".$height." alt=\"$alt\">";
    et mon fichier image.php contient (entres autres verifications diverses) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    header("Cache-Control: private");
    header("Content-type: " . image_type_to_mime_type(exif_imagetype($_GET['p'])));
    header("Content-Length: ".filesize($_GET['p']));
    @readfile($_GET['p']);
    Cependant, je rencontre les problemes suivants :

    1) Sous firefox, l'image apparait mais elle clignote légèrement à chaque affichage, comme si elle était actualisée à chaque fois. Je ne sais pas si cela est du à non-cachage cela dit.

    2) sous IE, elle ne s'affiche pas.

    J'ai essayé différents headers de cache : public, ou en spécifiant une durée de cache très longue, mais cela ne change rien.
    Et pour IE, je ne sais pas pourquoi il ne veut pas l'afficher.

    Edit : A noter que cela donne le même résultat si je n'envoie aucun headers, j'imagine que c'est normal vu que c'est déjà dans un tag <img>.


    Help ?

    Merci
    AnonCoder

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    hum, plusieurs choses :

    * Est tu bien en PHP > 4.3.0 ? (les 2 fonctions utilisées sont accessibles a partir de cette version uniquement)
    * Quel est le code source HTLM généré de ta balise img ? ne manquerait il pas un urlencode sur le chemin ?
    * J'espere que tes "verifications diverses" incluent tout les controles de sécurités necessaire ($chemin ne contient pas http://, ne termine pas par .php, ne commence pas par ., etc...)
    * Enleve le @ avant readfile, pour debugger c'est mieux
    * Une fois que tu as le code source HTML, charge directement l'image dans ton navigateur via cette url, que s'affiche t'il ?
    * As tu vidé le cache de IE ? il a tendance a garder les images, voir meme une version corrompue des images
    * Normal que l'image "clignote" sous FF si elle n'est pas dans le cache ;o)

    Sinon, pour le cache de IE, une fois que tout les autres points seront éclaircis, tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $url="image.php?p=....&uid=".mt_rand(0, 99999999);
    <img src="$url" ...>
    afin de forcer IE a ne jamais utiliser l'image en cache (puisque l'url est différence, il sera bien obligé)

    et il ne faut pas se fier aveuglement a Cache-Control: ou autre valeurs passés a header, ce sont des commandes qu'on envoit au navigateur... et qui peuvent etre interprétés différement. Les nombreux commentaires utilisateurs sur la page http://www.php.net/fr/header le prouvent ;o)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Tout d'abord, merci pour cette réponse rapide.

    Pour IE j'ai résolu le problème, c'était une bête histoire d'erreur dans le tag html.

    Pour le cache, j'arrive à forcer le cache pour un certain laps de temps avec l'attribut max-age de cache-control. J'en déduis donc que simplement "private" ou "public" et avec les headers d'une image ne suffit pas aux navigateurs à gérer le cache comme celui d'une image (certainement priorité au fait que le fichier appelé est .php)

    Ce n'est donc pas exactement ce que je recherche, puisque que je voudrai indiquer au navigateur de gérer le cache comme il l'entend et comme il le fait pour une image quelconque, alors que là je suis obligé de le "forcer" (enfin une directive qu'il peut appliquer ou pas certes) à ne la conserver en cache que pour une période que je lui indique.

    Pour autant je passe le sujet comme résolu car je ne pense pas qu'il y ait de solution (triviale) à cela.

    Merci
    AnonCoder

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Image] Affichage aux coordonnées sur une image
    Par Z4ng3tsu dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 13/09/2010, 21h25
  2. Affichage de texte sur une image
    Par Metalyn dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 23/04/2009, 13h31
  3. Réponses: 11
    Dernier message: 05/04/2009, 11h31
  4. Réponses: 3
    Dernier message: 15/08/2007, 09h04
  5. Affichage d'info dans une image
    Par mehdi_ouni dans le forum JDBC
    Réponses: 2
    Dernier message: 27/03/2007, 17h31

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