Php : actualiser image à cause cache ie

Résolu/Fermé
RideZeBigOne - 1 oct. 2004 à 22:36
 chaimae - 13 juil. 2015 à 13:56
Bonjour!

Sur mon site je génére des graphiques au format Jpeg (avec JPgraph pour ceux qui connaissent). j'affiche le résultat sur une page php/html jusque la tout va bien.

le souci vient d'IE qui ne recharge pas l'image si je la regénère entre temps sachant qu'elle garde le meme nom.(à cause du cache qui est souvent activé par défaut par les internautes). sur mon pc j'ai désactivé le cache et ca marche mais je ne peux pas le faire pour les internautes qui passent sur mon site.

j'ai pensé faire un refresh de ma page avec la balise META 'refresh' mais le faire de le faire périodiquement ne convient pas.

j'ai aussi mis des balises META 'no-cache' sans que cela fasse d'effet.

j'ai pensé faire un nom d'image évolutif (incrément) mais ca me complique le code pour pas grd chose... et je n'ai pas réussi à la faire :'(

je me tourne vers vous pour savoir si vous avez une astuce pour faire un refresh (une fois seulement de la page à son chargement) ou encore prendre le problème à sa source en forcant ie à recharger cette image lors du chargement de la page.

voici le bout de code (l'image est à la fin du code graph.jpeg):

<?php
include("infos/config.inc.php"); // on inclu le fichier de config
include("infos/fonctions.php"); // in inclu les fonctions
include("infos/style.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>
<title><? $titre = stripslashes($titre); echo "$titre"; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<Meta http-equiv="Pragma" content="no-cache">
</head>

<?php
echo "<body bgcolor=\"$backg\"";
if($imgbackg != ''){ echo "background=\"$imgbackg\""; }
echo ">";
?>

<div align="center">
<table width="97%" border=0 cellspacing=0 cellpadding=0>
<tr>

<td width="500">
<div align="center" style="color:<? echo "$txt"; ?>"></div>
</td>
</tr>
</table>
<br><br>
<img src="<? echo "$urlscript"; ?>/img/<? echo "$puce.gif"; ?>" border=0 alt="">
<a href="<? echo "$urlscript/"; ?>" class="liens">Liste des Sessions</a>
<img src="<? echo "$urlscript"; ?>/img/<? echo "$puce.gif";?>" border=0 alt="">
<a href="<? echo "$urlscript/?pg=ecrire"; ?>" class="liens">Ajouter une session</a>
<img src="<? echo "$urlscript"; ?>/img/<? echo "$puce.gif";?>" border=0 alt="">
<a href="<? echo "$urlscript/?pg=requete"; ?>" class="liens">Tracer Graphiques</a>
<img src="<? echo "$urlscript"; ?>/img/<? echo "$puce.gif";?>" border=0 alt="">
<a href="mailto:<? echo "$emailadmin"; ?>" class="liens">Contact</a>
<img src="<? echo "$urlscript"; ?>/img/<? echo "$puce.gif";?>" border=0 alt="">
<a href="<? $urlsiteweb = stripslashes($urlsiteweb); echo "$urlsiteweb"; ?>" class="liens">Retour au site</a> <br>
<br>

<img src="graph.jpeg" alt="graphique demandé www.sport2oufs.fr.st">

</div>
</body>
</html>


merci d'avance!!!
RideZeBigOne
http://www.sport2oufs.fr.st/stat/requete.php
A voir également:

7 réponses

RideZeBigOne
27 oct. 2004 à 18:37
salut Ben!

merci pour l'astuce!

finalement j'ai trouvé mieux. j'ai remis un post plus tard pour expliquer. c'est ultra simplet et efficace:
voir mon post ici:
http://www.commentcamarche.net/forum/affich-1053645-soluce-Eviter-le-cache-de-l%27explorateur-web

A+
RideZeBigOne
9
Bonjour, j'aibien lu ton post et l'ai appliqué, mais cela ne fonctionne pas pour moi....je mets bien l'heure en parametre (apres le ?) lorsque que j'appelle mon fichier php generateur de graphe jpgraph pour que l'appel soit different a chaque fois mais j'obtient toujours le meme graphe....le 1er qui ete generé avec ce nom de fichier....je craque...
merci pour tout autre conseil!!!
0
rourgo > cac
9 mai 2007 à 21:40
A si c'est génial !!
j'avais exactement le meme probleme, et c'est le seul truc qui marche !!
0
Je cite "RideZeBigOne" :

" Il suffit d'utiliser la fonction time d'UNIX. Plus besoin des headers META avec le no-cache etc...
en voici qqles exemple:

<img src="http://www.mysite.com/myimage.jpg?<?echo time()?>">

echo ('<img src="../mydir/mypage.php?' .time(). '">' . '<br><br>');

Pour les explications voir ici:
http://forums.devshed.com/showthread.php?s=&threadid=40363&highlight=jpgraph+time

ou encore ici :

http://jpgraph.intellit.nl/viewtopic.php?t=349

J'espère que cela vous servira si vous avez ce genre de pb!! "

Et je lui dit mille fois merci. J'etais passer pour un con lors de ma presentation devant mon boss. Avec cette soluce tout marche nickel...
6
Bonjour,

Merci à ce forum et pour la fameuse fonction " Time() ". Cela fait un moment que je me cassais la tête à chercher une solution à mon problème (avec le librairie GD ne php). C'est maintenant résolu.

MERCI
0
Une petite astuce pour éviter les rechargements inutiles et accélérer l'affichage.

Problème de la solution time():
Ca fait changer le nom du fichier en cache à chaque chargement de la page, donc l'utilisateur va devoir à chaque fois attendre le chargement de toutes les images de la page, même s'il l'a déjà visitée une fois et qu'il n'y a eu aucune mise à jour depuis.

Solution, la fonction filectime() en suffixe:
<IMG src='<? echo $picture."?".filectime($picture); ?>'>
La fonction filectime retourne la date de la dernière création du fichier.
Donc tant que l'image ne change pas, le nom identique à celui en cache dans IE, et l'image s'affichera immédiatement.
Quand l'image est mise à jour, la date de création change, donc le nom comparé au cache est différent, et uniquement cette image sera rechargée!

En espérant que ça vous aidera.
2
PhildePantin
5 oct. 2010 à 21:21
@brunchy : c'est tout bonnement génial.
Merci à toi
0
C'est formidable !
Je cherchais cette solution depuis un moment. On me parlait bien de mettre time ?? mais sans plus d'explication. Ton explication est limpide et ça marche du tonnerre !
0
Bravo c excellent
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 oct. 2004 à 00:34
Essaies avec ça http://fr2.php.net/header#AEN41309 :-)

Kilian, débutant en tâche de fond.....
0
RideZeBigOne
2 oct. 2004 à 10:33
salut Killian!

j'allais t'écrire que ca ne marchait pas mais pas tout à fait!!
j'ai d'abord essayer en local (avec apache) mais pas d'amélioration , toujours l'ancienne image qui s'affiche.
juste avant de poster un message j'ai tout de meme essayé en uploadant sur mon hébergeur et la ca marche!!!! (comprend pas pkoi)

www.sport2oufs.Fr.st/stat/index.php (rubrique tracer graphique)

par contre à koi sert les headers 'expires' et 'last-modified' ??? la date du 26 juillet 1997 est bidon je présume pour indiquer que cette est expirée depuis longtps et qu'il faut recharger?

<?php
// Date du passé
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// toujours modifié
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");
?>


merci encore!!!
RideZeBigOne
www.sport2oufs.Fr.st
0
RideZeBigOne
2 oct. 2004 à 10:47
euh... bah non finalement ca marche pas si bien que ca :(((

ca a du marcher sur qqles images mais maintenant ca reste tjrs sur l'image d'origine

les boules...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 oct. 2004 à 14:40
Apparemment, elle sont reçues en balises meta en html. (Par exemple <meta http-equiv="Expires" ...etc...)

Pour expires:
"Avec la valeur "expires", il est possible de définir une date limite de vos pages et donc d'indiquer au serveur proxy qu'il doit impérativement recharger la page originale à la date indiquée."

Source=>http://www.ac-creteil.fr/util/webmestre/soluhtml/METATAG.HTM

Ici tu trouveras l'utilité de last-modified:
http://membres.lycos.fr/fdinh/atari/webm4.htm

Kilian, débutant en tâche de fond.....
0
Ah mille merci !!!!!
La meilleure astuce de la décennie !
(je confirme qu'il n'y a pas que IE qui est concerné)

Moi je fais (exemple avec un paramètre):
$time_=time();
... src="image.php?param=$param&$time_"...

Je trouve que c'est plus propre, mais chacun a ses habitudes...
0
Moi j'ai une solution pas top mais qui marche qd même :

Il s'agit d'utiliser la balise <META .. refresh ..> avec redirection vers une url. Cette url sera le même fichier mais avec une variable passée de sorte que la page ne se recharge plus après 1 fois (avec un script php).

Ca donne :

<?
	if (empty($refresh)) {
	echo "<meta http-equiv='refresh' content='0;URL=http://tonsite.com/tonfichier.php?refresh=1'>";
	}
?>


En attendant mieux...
-1