J'ai un site php en cours d'exécution sur un serveur cloud. Quand j'ajoute de nouveaux fichiers css, js ou images, le navigateur charge les mêmes anciens fichiers js, css et image stockés dans le cache.
Mon site a un doctype et une balise meta comme ci-dessous
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
En raison du doctype et du méta-code ci-dessus, je charge les mêmes fichiers mis en cache dans le navigateur au lieu d'un nouveau
php
http-headers
browser-cache
cache-control
ArrayOutOfBound
la source
la source
No Cache in all Browsers
. Vous pouvez également faire un? RandomGeneratedNumber sur les fichiers que vous ne souhaitez pas mettre en cache.Réponses:
essaye ça
la source
session_start()
après, il remplacera votre en-têteCache-Control: private, max-age=10800, pre-check=10800
car 180 minutes est la valeur par défaut desession.cache_expire
. Si vous ne pouvez pas éviter de démarrer la session, mais que vous devez désactiver l'utilisation du cachesession_cache_limiter('private');session_cache_expire(0);
.header
function est un booléen pour replace . Le paramètre de remplacement facultatif indique si l'en-tête doit remplacer un en-tête similaire précédent ou ajouter un deuxième en-tête du même type.Ici, si vous voulez le contrôler via HTML: faites comme ci-dessous Option 1:
Et si vous voulez le contrôler via PHP: faites-le comme ci-dessous Option 2:
ET l' option 2 EST TOUJOURS MIEUX afin d'éviter les problèmes de mise en cache basée sur un proxy.
la source
Vous pouvez essayer ceci:
Espérons que cela aidera à empêcher le cache, le cas échéant!
la source
J'ai eu un problème avec la mise en cache de mes fichiers css. Définir des en-têtes en PHP ne m'a pas aidé (peut-être parce que les en-têtes devraient être définis dans le fichier de feuille de style au lieu de la page qui y est liée?).
J'ai trouvé la solution sur cette page: https://css-tricks.com/can-we-prevent-css-caching/
La solution:
Ajoutez l'horodatage en tant que partie requête de l'URI du fichier lié.
(Peut être utilisé pour css, js, images, etc.)
Pour le developpement:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
Pour la production (où la mise en cache est surtout une bonne chose):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(et réécrire manuellement si nécessaire)
Ou combinaison de ces deux:
ÉDITER:
Ou une plus jolie combinaison de ces deux:
la source
Empêcher le cache du navigateur n'est pas une bonne idée selon le cas. À la recherche d'une solution, j'ai trouvé des solutions comme celle-ci:
le problème ici est que si le fichier est écrasé lors d'une mise à jour sur le serveur, ce qui est mon scénario, le cache est ignoré car l'horodatage est modifié même le contenu du fichier est le même.
J'utilise cette solution pour forcer le navigateur à télécharger des actifs uniquement si son contenu est modifié:
la source
stat
appel. Sans cache du système de fichiers, 16ns, tops? Avec cache, de manière fiable <8ns. Nanosecondes. Et sur mon système, MD5 peut traiter 754 Mio / s sans clignoter. (openssl speed md5
) Combiné, un fichier CSS de 100 Ko aurait une surcharge supplémentaire combinée de… 129 µs (microsecondes, 0,1295 ms) + 8 ns (ce qui ne contribue pas de manière significative au nombre final) = 129 µs.hash_file('md5', $deployment_counter)
ouhash_file('md5', $cache_clear_counter)
sont les premiers qui viennent à l'esprit.