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

élèveDébutant
 
MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
Lolo
 
Merci RideZeBigOne !!!!!

Tu m'as évité de longues nuits de travail !!!

Si je pouvais, je t'embrasserais !!!!!

@+
0
Gwen_bzh
 
Grandiose, fabulissime, mille mercis !!!

Ah ben, ça fait du bien : depuis le temps que je cherchais ! C'était tout c.. mais n'empêche qu'il fallait y penser.

Encore merci pour ce travail de recherche.
0
dadou
 
Merci! Oh grand dieu de la programmation,
Je m'incline devant toi,
Je prierai ta divinité jour et nuit...


J'vais pi etre m'arreter là, mais tu me sauve, ca fait plus de 3 jour que je suis la dessus :)
0
hiul
 
merci gars j'aurai pas pensé faire un truc comme ca c'et génial
0

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

Posez votre question
Ridezebigone Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
hello,

bon j'ai du me résinscrire à CCM car je crois que c'était un des derniers messages que j'avais mis sur ce forum lol , je vois que j'ai bien fait de mettre l'astuce. Je rends à Cesar ce qui est à Cesar, je n'ai rien inventé, j'ai recopié l'astuce figurant dans les liens que j'ai mis dans mon message :-)

5 ans, pfiou ! j'avoue que j'ai eu du mal à comprendre ce que j'avais moi-meme écrit ... faut dire que depuis qqles années je ne touche presque plus mon site web ;-)

J'espère que l'astuce servira encore à d'autres, merci pour vos commentaires en tout cas ! :-)

http://www.sport2oufs.fr
0
ratoman93
 
Merciiii!!

Excellent!!! heuresement que je suis tombé rapidemment sur ce topic, ca m'a évité de galérer :p

Encore merci pour cette brillante solution ;)
0
walou
 
ca va bouffer la bande passante coté hebergement non? vaut mieux créer un nouveau nom pour l'image et le mettre dans la base de donnée
0
masternico Messages postés 487 Date d'inscription   Statut Membre Dernière intervention   320
 
hé bien, en fait non : si tu attribue un nouveau nom de fichier à chaque demande, tu ne résous pas le problème de la bande passante puisque tu oblige le serveur à renvoyer une nouvelle fois le fichier.

En fait, c'est vrais, le cache sert effectivement à éviter une surcharge de la bande passante.
Le problème pour nous développeur, c'est que si le nom de l'image reste le même, c'est l'image en cache qui est resservie.
Et contrairement à ce que pense la plupart des gents, cela ne concerne pas uniquement IE, car en fait, il y a plusieurs niveau de cache. Le plus e*******ant, c'est le navigateur (IE, FF, ...). Le navigateur va stocker sur le disque dur une version de l'image pour éviter d'avoir à la retélécharger lors d'un rafraichissement de la page (entre autre).
Ensuite, il y a le cache du proxy du FAI, car lui aussi à tout intérêt à éviter qu'un même fichier soit trop souvent téléchargé. Cela lui permet de resservir la même image à toutes les personnes connectées chez lui.
Enfin, on trouve aussi une zone de cache sur le serveur hébergeant le fichier image, car le serveur a tout intérêt à éviter une trop grande consommation des ressources disques.

Tout ce mécanisme a été mis en place à l'époque ou la seule connexion existante était le modem 56Kb (contre 8Mb actuellement en moyenne). Il était alors IMPÉRATIF de mettre en place les zones de cache, car quand on voit qu'il fallait des fois quelques minutes pour charger une page avec juste quelques images, le cache permettait de recharger en quelques secondes la même page.

La seule manière d'éviter le cache, c'est donc soit de changer le nom du fichier à la volée en rajoutant le suffixe '?' qui indique qu cache que c'est une requette dont la réponse peut changer, soit de changer le nom de fichier à chaque demande comme tu l'as indiqué. Mais alors tu te trouves avec le même problème de surcharge de la bande passante mais en plus, tu surcharge aussi ton disque dur...
0
petit_gg
 
GENIALISSIME !!!!!

HYPER SIMPLE ET HYPER EFFICACE !!!


MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI - MERCI -
0
BeatGrinder
 
Salut, merci infiniment pour cette astuce aussi simple que pratique. A garder de côté pour des projets ultérieurs...!
0
Kok87
 
Différentes entêtes HTTP (pas les metas HTML) permettent de gérer/contrôler la mise cache.

Au niveau des requêtes envoyées par les navigateurs il est nécessaire de prendre en compte les entêtes Cache-Control, Age, If-Modified-Since, If-Not-Modified-Since, If-None-Match, If-Match.

Au niveau des réponses retournées côtés serveurs (PHP, ASP, JSP, ...) il est important de renseigner les entêtes Cache-Control, Last-Modified, ETag.

Pour plus de détails : http://www.creation-site-internet-le-mans.net/page.content/Cache_Web
0
Flo
 
Bonjour a tous ceux qui tombent encore la dessus, encore un petit plus pour les fondus d'optimisation ;-)

"Pour avoir le temps en secondes, préférez $_SERVER['REQUEST_TIME'] à time (). En effet, time () demande un temps de calcul à PHP alors que $_SERVER['REQUEST_TIME'] est déjà calculé !"

Source: http://www.reflectiv.net/blog/optimisation-php/

Tchuss les potes.
0
Leneurone
 
J'avais le même problème et c'est réglé, merci beaucoup pour la solution !

Le cache est un outil du malin ^^

Merci !
Leneurone
0
Brunchy
 
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.
0
prg11 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Salut
Je veut realiser un graphe qui affiche la temperature d'une journée de travailler(24h:00)
ces graphe est en temp reél .
moi je veut fair sa simulation: c'est a dire crier une table dans ma base de données et al modifier a chaque fois (chaque les 5 seconde par exemple) .
comment fair un graphe en temp reél?
j'utilise le jpgraphe et le winxp et serveur apache et php 4.3.3 et mysqle.
j'ai besoin de se script aider moi et serais la pour tout eautre question
-1