Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2006, 20h27   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 2
Points : 2
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 :
echo "<img src=\"image.php?p=$chemin\" width=".$width." height=".$height." alt=\"$alt\">";
et mon fichier image.php contient (entres autres verifications diverses) :

Code :
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
AnonCoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 10h33   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
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 :
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)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 13h51   #3
Invité de passage
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 2
Points : 2
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
AnonCoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h09.


 
 
 
 
Partenaires

Hébergement Web