Soluce ! Eviter le cache de l'explorateur web
Résolu
RideZeBigOne
-
Brunchy -
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:
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
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:
- Soluce ! Eviter le cache de l'explorateur web
- Web office - Guide
- Navigateur web - Guide
- Explorateur de fichiers - Guide
- Éviter pub youtube - Accueil - Streaming
- Copie caché - Guide
34 réponses
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
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
ouahhhhhhhhhhhhhh !!!!!!!!
une 1/2 journée à chercher ca !!!
merci bcp!!
IE fait vraiment chier, superbe astuce
merci encore
une 1/2 journée à chercher ca !!!
merci bcp!!
IE fait vraiment chier, superbe astuce
merci encore
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!!
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!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
la solution est loin d'etre la meilleure car les images vont toutes s'empiler dans le disque dur du coté serveur !
Cordialement
la solution est loin d'etre la meilleure car les images vont toutes s'empiler dans le disque dur du coté serveur !
Cordialement
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é !
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é !
+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.
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.
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.
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.
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
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
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.
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.
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">';
Et ca fonctionne aussi sur les input de type image!
echo '<input type=image src="image.png?'.time().'" name="name" value="value" alt="alt">';
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
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