Soluce ! Eviter le cache de l'explorateur web

Résolu
RideZeBigOne -  
 Brunchy -
Bonjour à tous!

j'avais posté il y a qqles semaines un message concernant un problème lié au cache d'IE : je créée une image (avec JPGraph) qui n'était pas rafraîchie par IE car elle porte tjrs le même nom.

voir exactement le pb ici (post précédent :
http://www.commentcamarche.net/forum/affich-1035977-Php-actualiser-image-%E0-cause-cache-ie

Aprés de longues recherches et autres tentatives de code tordus j'ai finalement trouvé sur un autre forum (anglais) une soluce aussi simple qu'efficace :

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!!

A+
RideZeBigOne
http://www.sport2oufs.fr.st
A voir également:

34 réponses

Nicodème
 
Immense merci, c'est carrément génial, voilà une nuit entière que je cherchais une solution...
C'est beaucoup plus simple que de changer le nom de l'image.
Je ré-explique à ma manière :

Le code PHP avec la fonction time() génère un code html du type :
<img src="../../images/soleil.gif?1161228656">

IE trouve et affiche l'image "soleil.gif" sans broncher,
mais cette astuce bluffe le cache qui compare "soleil.gif?1161228656"
Or, comme ce chiffre change toutes les secondes, il recharge l'image à chaque nouvel appel de la page...

Merci encore, tu me sauves la vie !
Nicodème
4
rasdri
 
ouahhhhhhhhhhhhhh !!!!!!!!
une 1/2 journée à chercher ca !!!
merci bcp!!
IE fait vraiment chier, superbe astuce
merci encore
1
totoduweb
 
MERCIIIIIIIIIIIIIIIIIIIIIIII +++ d'avoir pris le temps de nous partager ta solution a ce ...?:XX;.. de IE7 !
Cette solution est géniale :)

comme d'autres avant... je cherchais depuis longtemps
0
beng
 
j'ai une chose a dire MERCI!!!!!!!!!!!!!!!!!!!!!!!!!!!

voila plusieurs heures que je cherche et je tombe sur ce topic
et je commencai a me décourager car meme les header ne marchai pas avec moi.
c'est EXACTEMENT mon probleme

merci encore!!
0
Gihef Messages postés 5150 Date d'inscription   Statut Contributeur Dernière intervention   2 779
 
Merci d'être revenu nous montrer ça.
0

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

Posez votre question
ninive
 
Super, simple et fonctionnel.

Merci !!
0
atomik
 
Merci beaucoup. ça m'a grandement dépanné!
0
masternico Messages postés 487 Date d'inscription   Statut Membre Dernière intervention   320
 
ça c'est de la soluce béton... fallait y penser
0
masternico Messages postés 487 Date d'inscription   Statut Membre Dernière intervention   320
 
Par contre, il faudrait déclarer ce post "résolu"
0
Nicolas
 
Bonjour,
la solution est loin d'etre la meilleure car les images vont toutes s'empiler dans le disque dur du coté serveur !

Cordialement
0
hihi
 
ca s empliera dans le cache coté client uniquement ... vu que les images sont générés en dynamique par un script php par exemple
0
MMMX
 
ABSOLUMENT GENIAL !!!!

Ca fait plusieur semaines que je traficotte mon code pour essayer de parer le problème, et enfin, je tombe sur ce topic ! Mille mercis à toi RideZeBigOne !!!

Petit message à Nicolas : tu dénigres une solution qui fonctionne parfaitement, sans faire de proposition ... très constructif comme commentaire. Ca ca nous permet vraiment d'avancer. Encore merci d'être passé !
0
masternico Messages postés 487 Date d'inscription   Statut Membre Dernière intervention   320
 
+1 MMX
Je ne comprends pas très bien pourquoi les images s'entasseraient coté serveur? le serveur envoi toujour la même image, c'est plutôt coté client que ça s'entasse.
De toute façon je ne crois pas qu'il existe de meilleur tour de passe passe pour contourner la mise en cache vue que chaque browser a ses propres paramètres. Ce qui va marcher chez l'un ne marchera peut être pas chez l'autre.
Pour ma part, je maintiens que la soluce est bien. A l'utilisateur de vider son cache de temps en temps.
0
doblern Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Salut à tous,

je n'ai pas bien compris la soluce,
il s'agit de créer un filename unique sur l'image tel que toto.jpg123456 ?
ou il s'agit d'une autre solution moin crade ?

Merci d'avance pour vos réponses.
0
masternico Messages postés 487 Date d'inscription   Statut Membre Dernière intervention   320
 
Salut à toi (le renegat... pardon... des restes de jeunesse)
En fait, le nom des images sur ton serveur ne change pas, tu ne change pas non plus de ligne dans ton script qui retourne l'image (dans l'exemple, c'est mypage.php).
La seule chose qui change, c'est le lien d'appel de la page. C'est toute la beauté du truc en fait. Comme le lien d'appel change à chaque fois, le browser pense qu'il sagit d'une nouvelle page et donc écoute la réponse du serveur et donc reçoit la bonne image.
Sinon, en l'abscence de cette astuce, comme le lien est le même d'un appel à l'autre, le browser se contente d'aller chercher la copie des éléments graphiques qui se trouve dans son cache.
Maintenant, le cache pourrait quasiment être désactivé par défaut vu les vitesses de transfert actuels.
La zone de cache était très utilile en des temps anciens, quand on parlait encore de ligne RTC et modem 56k. Car alors, quand il sagissait d'ouvrir une page et d'attendre jusqu'à une minute pour les pages les plus lourdes, il était pratique de récupérer les éléments graphiques déja téléchargé plutôt que de tout recommencer. Cela faisait gagner un temps fou.
J'ai monté un petit ciber-café à un moment avec 10 machine et un serveur avec modem 56K dans un coin reculé du costa rica (c'est pas du pipot) et là, je pouvait dire que ça ramait. Les touristes cliquaient sur un lien et attendaient plusieurs minutes avant d'avoir leur pages.
J'ai donc installé un proxy sur le serveur qui se chargeait d'orienter les paquet vers les machines (c'est son rôle) mais surtout, il centralisait le cache. Et là, oh miracle, les pages se chargeaient en un clein d'oeil...
aaaaaah... nostalgie...
Allez, bonne nuit, je vais me coucher
0
chldc
 
De nombreux mois plus tard je tombe sur ta solution : magnifique !
Je manipule des images svg en php je n'en pouvais plus de réactualiser ce cadre :
'<embed src="'.$MonDossier.'/'.$NomImage.'svg?'.time().'">'
Merci encore !
0
doblern Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta réponse masternico,

je comprend bcp mieu la solution qui est proposée et il est donc vrai que c'est une bonne solution.
Auparavant, je pensais que c'était une solution avec timestamp inclu dans le filename (ce qui est vraiment crade pour le serveur).

Merci à tous pour la solution.

Nicolas.
0
2nys
 
Bravo et encore bravo, des heures à chercher pour trouver ici.

Et ca fonctionne aussi sur les input de type image!

echo '<input type=image src="image.png?'.time().'" name="name" value="value" alt="alt">';
0
cyrilkiller
 
Vraiement un grand merci
0
jms6501
 
Cet astuce, c'est une perle !!!!

Merci !
0
Am3d64
 
Merci ca fonctionne nikel,

Perso j utilse l'astuce sur une page d'administration (dans la colone de gauche j'upload l'image via un formulaire et dans la colone de droite j'ai un apercu via un include de la page où je modifie la photo) tout ca sur une page protegé via un .htaccess et ca passe !!!

Seule petite modife que j ai apporté au code c'est:

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

plutot que:

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


je sais pas si ca a une grande importance mais moi ca passait pas bien sans <?php et l'espace apres time()

Encore une nuit blanche que je ne regrette pas
0
puxor Messages postés 318 Date d'inscription   Statut Membre Dernière intervention   89
 
Très belle astuce, fallait juste y penser =)
0
LNA
 
4 ans plus tard, ton post continue à faire des heureux!!! en l'occurence, une TRES TRES HEUREUSE puisque, comme bcp de personnes visiblement, j'ai galéré un bon moment avant de tomber sur ta superbe astuce! ;)

encore merci RideZeBigOne!

+++
0
famazigh
 
merci

j'ai eu le meme pb avec une image generée avec pear et avec la fonction time() ça marche a merveille

c'est super
0