Skip to content
Extraits de code Groupes Projets
Valider 2bb536d8 rédigé par Fil's avatar Fil
Parcourir les fichiers

changement important sur la gestion du cache : par defaut les pages deviennent...

changement important sur la gestion du cache : par defaut les pages deviennent 'dynamiques', et il faut indiquer #CACHE{3600,cache-client} pour qu'elles soient cachees chez le client (notamment la css de l'espace prive). Resoud le probleme du non-rafraichissment d'une page qu'on vient de recalculer, parce qu'elle est cachee trop fort cote browser
parent 8cec20df
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
ATTENTION: il faut absolument le charset sinon Firefox croit que ATTENTION: il faut absolument le charset sinon Firefox croit que
c'est du text/html ! c'est du text/html !
] ]
#CACHE{360*1000} #CACHE{3600*100,cache-client}
#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} #HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15}
#HTTP_HEADER{Vary: Accept-Encoding} #HTTP_HEADER{Vary: Accept-Encoding}
body { body {
......
...@@ -95,20 +95,21 @@ function assembler_page ($fond) { ...@@ -95,20 +95,21 @@ function assembler_page ($fond) {
$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
// une perennite valide a meme reponse qu'une requete HEAD // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND !$var_mode // pages sont dynamiques)
AND $chemin_cache AND !$flag_dynamique if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
// l'admin connecte veut voir ses boutons a jour AND !$var_mode
AND (!$_COOKIE['spip_admin'] OR (_request('var_fragment')!==null))) { AND $chemin_cache
if (!strstr('IIS/', $_SERVER['SERVER_SOFTWARE'])) { AND !$flag_dynamique
$since = preg_replace('/;.*/', '', AND !strstr('IIS/', $_SERVER['SERVER_SOFTWARE'])
$_SERVER['HTTP_IF_MODIFIED_SINCE']); ) {
$since = str_replace('GMT', '', $since); $since = preg_replace('/;.*/', '',
if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) { $_SERVER['HTTP_IF_MODIFIED_SINCE']);
$page['status'] = 304; $since = str_replace('GMT', '', $since);
$headers_only = true; if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) {
} $page['status'] = 304;
$headers_only = true;
} }
} }
......
...@@ -1211,6 +1211,8 @@ function balise_HTTP_HEADER_dist($p) { ...@@ -1211,6 +1211,8 @@ function balise_HTTP_HEADER_dist($p) {
// #CACHE // #CACHE
// definit la duree de vie ($delais) du squelette // definit la duree de vie ($delais) du squelette
// #CACHE{24*3600} // #CACHE{24*3600}
// parametre(s) supplementaire(s) :
// #CACHE{24*3600, cache-client} autorise gestion du IF_MODIFIED_SINCE
// http://doc.spip.org/@balise_CACHE_dist // http://doc.spip.org/@balise_CACHE_dist
function balise_CACHE_dist($p) { function balise_CACHE_dist($p) {
$duree = valeur_numerique($p->param[0][1][0]->texte); $duree = valeur_numerique($p->param[0][1][0]->texte);
...@@ -1220,18 +1222,25 @@ function balise_CACHE_dist($p) { ...@@ -1220,18 +1222,25 @@ function balise_CACHE_dist($p) {
. $duree . $duree
. '"); ?'.'>\''; . '"); ?'.'>\'';
// remplir le header Cache-Control // Remplir le header Cache-Control
if ($duree > 0) // cas #CACHE{0}
$p->code .= '.\'<'.'?php header("Cache-Control: max-age=' if ($duree == 0)
. $duree
. '"); ?'.'>\'';
else
$p->code .= '.\'<' $p->code .= '.\'<'
.'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?' .'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?'
.'><' .'><'
.'?php header("Pragma: no-cache"); ?' .'?php header("Pragma: no-cache"); ?'
.'>\''; .'>\'';
// cas #CACHE{360, cache-client}
if (isset($p->param[0][2])) {
$second = ($p->param[0][2][0]->texte);
if ($second == 'cache-client'
AND $duree > 0)
$p->code .= '.\'<'.'?php header("Cache-Control: max-age='
. $duree
. '"); ?'.'>\'';
}
$p->interdire_scripts = false; $p->interdire_scripts = false;
return $p; return $p;
} }
......
...@@ -231,7 +231,8 @@ function restaurer_meta_donnees ($contenu) { ...@@ -231,7 +231,8 @@ function restaurer_meta_donnees ($contenu) {
} }
} }
$page['texte'] = substr($contenu, strlen($match[0])); $page['texte'] = substr($contenu, strlen($match[0]));
} else $page['texte'] = $contenu; } else
$page['texte'] = $contenu;
return $page; return $page;
} }
...@@ -254,12 +255,12 @@ function nettoyer_petit_cache($prefix, $duree = 300) { ...@@ -254,12 +255,12 @@ function nettoyer_petit_cache($prefix, $duree = 300) {
// Interface du gestionnaire de cache // Interface du gestionnaire de cache
// Si son 3e argument est non vide, elle passe la main a creer_cache // Si son 3e argument est non vide, elle passe la main a creer_cache
// Sinon, elle recoit un contexte (ou le construit a partir de REQUEST_URI) // Sinon, elle recoit un contexte (ou le construit a partir de REQUEST_URI)
// et affecte les 4 autres parametres recus par reference: // et affecte les 4 autres parametres recus par reference:
// - use_cache qui est // - use_cache qui est
// < 0 s'il faut calculer la page sans la mettre en cache // < 0 s'il faut calculer la page sans la mettre en cache
// = 0 si on peut utiliser un cache existant // = 0 si on peut utiliser un cache existant
// > 0 s'il faut calculer la page et la mette en cache use_cache secondes // > 0 s'il faut calculer la page et la mette en cache use_cache secondes
// - chemin_cache qui est le chemin d'acces au fichier ou vide si pas cachable // - chemin_cache qui est le chemin d'acces au fichier ou vide si pas cachable
// - page qui est le tableau decrivant la page, si le cache la contenait // - page qui est le tableau decrivant la page, si le cache la contenait
// - lastmodified qui vaut la date de derniere modif du fichier. // - lastmodified qui vaut la date de derniere modif du fichier.
...@@ -304,9 +305,9 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la ...@@ -304,9 +305,9 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la
// cas sans jamais de cache pour raison interne // cas sans jamais de cache pour raison interne
if (isset($GLOBALS['var_mode']) && if (isset($GLOBALS['var_mode']) &&
(isset($_COOKIE['spip_session']) (isset($_COOKIE['spip_session'])
|| isset($_COOKIE['spip_admin']) || isset($_COOKIE['spip_admin'])
|| @file_exists(_ACCESS_FILE_NAME))) { || @file_exists(_ACCESS_FILE_NAME))) {
supprimer_fichier(_DIR_CACHE . $chemin_cache); supprimer_fichier(_DIR_CACHE . $chemin_cache);
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter