123 votes

désactiver le cache pour certaines images

Je génère des images en utilisant une librairie PHP.

Parfois, le navigateur ne charge pas le nouveau fichier généré.

Comment puis-je désactiver le cache uniquement pour les images créées dynamiquement par moi?

Remarque: je dois utiliser le même nom pour les images créées au fil du temps.

258voto

Hexagon Points 2927

Une simple solution de ce problème qui se sent comme un hack mais est assez portable est à ajouter généré de façon aléatoire une chaîne de requête à chaque demande de la dynamique de l'image.

Ainsi, par exemple -

<img src="image.png" />

Allait devenir

<img src="image.png?dummy=8484744" />

Ou

<img src="image.png?dummy=371662" />

Du point de vue de la web-server le même fichier est accessible, mais du point de vue du navigateur, pas de mise en cache peut être effectuée.

La génération de nombres aléatoires peuvent se produire soit sur le serveur au moment de servir la page (il suffit de s'assurer que la page elle-même n'est pas mis en cache...), ou sur le client (en JavaScript).

Vous aurez besoin de vérifier si votre serveur web peut faire face à cette astuce.

46voto

lhunath Points 27045

Les stratégies de mise en cache du navigateur peuvent être contrôlées par des en-têtes HTTP. N'oubliez pas qu'ils ne sont qu'un indice, vraiment. Étant donné que les navigateurs sont extrêmement incohérents dans ce domaine (et dans d’autres), vous aurez besoin de plusieurs en-têtes pour obtenir l’effet souhaité sur différents navigateurs.

     header("Pragma-directive: no-cache");
    header("Cache-directive: no-cache");
    header("Cache-control: no-cache");
    header("Pragma: no-cache");
    header("Expires: 0");
 

15voto

Si vous avez besoin de le faire dynamiquement dans le navigateur à l'aide de javascript, voici un exemple ...

 <img id=graph alt="" 
  src="http://www.kitco.com/images/live/gold.gif" 
  />

<script language="javascript" type="text/javascript">
    var d = new Date(); 
    document.getElementById("graph").src = 
      "http://www.kitco.com/images/live/gold.gif?ver=" + 
       d.getTime();
</script>
 

5voto

Dimitri Visser Points 64

Je sais que ce sujet est ancien, mais il se classe très bien dans Google. J'ai découvert que mettre cela dans votre en-tête fonctionne bien;

 <meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Pragma" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
<meta Http-Equiv="Pragma-directive: no-cache">
<meta Http-Equiv="Cache-directive: no-cache">
 

3voto

Changer la source de l'image est la solution. Vous pouvez en effet le faire en ajoutant un timestamp ou un nombre aléatoire à l’image.

Il serait préférable d’ajouter une somme de contrôle, par exemple les données représentées par l’image. Cela permet la mise en cache lorsque possoble.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X