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

pouvoir dire qu'un squelette ne doit pas etre invalide des qu'on touche a la...

pouvoir dire qu'un squelette ne doit pas etre invalide des qu'on touche a la base de donnees (sur une idee et une piste de code donnees par Renaud, ml@ascii-fr.com) : #CACHE{3600, statique}
parent 44acba95
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -178,7 +178,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) { ...@@ -178,7 +178,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) {
// 1. Cas d'une page contenant uniquement du HTML : // 1. Cas d'une page contenant uniquement du HTML :
if ($page['process_ins'] == 'html') { if ($page['process_ins'] == 'html') {
foreach($page['entetes'] as $k => $v) @header("$k: $v"); envoyer_entetes($page['entetes']);
} }
// 2. Cas d'une page contenant du PHP : // 2. Cas d'une page contenant du PHP :
...@@ -189,7 +189,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) { ...@@ -189,7 +189,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) {
// Si la retention du flux de sortie est impossible // Si la retention du flux de sortie est impossible
// envoi des entetes // envoi des entetes
if (!$flag_ob) { if (!$flag_ob) {
foreach($page['entetes'] as $k => $v) @header("$k: $v"); envoyer_entetes($page['entetes']);
xml_hack($page, true); xml_hack($page, true);
eval('?' . '>' . $page['texte']); eval('?' . '>' . $page['texte']);
$page['texte'] = ''; $page['texte'] = '';
...@@ -206,7 +206,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) { ...@@ -206,7 +206,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) {
xml_hack($page); xml_hack($page);
ob_end_clean(); ob_end_clean();
foreach($page['entetes'] as $k => $v) @header("$k: $v"); envoyer_entetes($page['entetes']);
// en cas d'erreur lors du eval, // en cas d'erreur lors du eval,
// la memoriser dans le tableau des erreurs // la memoriser dans le tableau des erreurs
// On ne revient pas ici si le nb d'erreurs > 4 // On ne revient pas ici si le nb d'erreurs > 4
......
...@@ -110,6 +110,14 @@ function public_assembler_dist($fond, $connect='') { ...@@ -110,6 +110,14 @@ function public_assembler_dist($fond, $connect='') {
return assembler_page ($fond, $connect); return assembler_page ($fond, $connect);
} }
// Envoyer les entetes, en retenant ceux qui sont a usage interne
// et demarrent par X-Spip-...
function envoyer_entetes($entetes) {
foreach ($entetes as $k => $v)
# if (strncmp($k, 'X-Spip-', 7))
@header("$k: $v");
}
// //
// calcule la page et les entetes // calcule la page et les entetes
......
...@@ -947,6 +947,10 @@ function balise_HTTP_HEADER_dist($p) { ...@@ -947,6 +947,10 @@ function balise_HTTP_HEADER_dist($p) {
// #CACHE{24*3600} // #CACHE{24*3600}
// parametre(s) supplementaire(s) : // parametre(s) supplementaire(s) :
// #CACHE{24*3600, cache-client} autorise gestion du IF_MODIFIED_SINCE // #CACHE{24*3600, cache-client} autorise gestion du IF_MODIFIED_SINCE
// #CACHE{24*3600, statique} ne respecte pas l'invalidation par modif de la base
// (mais s'invalide tout de meme a l'expiration du delai)
// par defaut cache-client => statique
// cf. ecrire/public/cacher.php
// 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);
...@@ -965,14 +969,24 @@ function balise_CACHE_dist($p) { ...@@ -965,14 +969,24 @@ function balise_CACHE_dist($p) {
.'?php header("Pragma: no-cache"); ?' .'?php header("Pragma: no-cache"); ?'
.'>\''; .'>\'';
// cas #CACHE{360, cache-client} // recuperer les parametres suivants
if (isset($p->param[0][2])) { $i = 1;
$second = ($p->param[0][2][0]->texte); while (isset($p->param[0][++$i])) {
if ($second == 'cache-client' $pa = ($p->param[0][$i][0]->texte);
AND $duree > 0)
if ($pa == 'cache-client'
AND $duree > 0) {
$p->code .= '.\'<'.'?php header("Cache-Control: max-age=' $p->code .= '.\'<'.'?php header("Cache-Control: max-age='
. $duree . $duree
. '"); ?'.'>\''; . '"); ?'.'>\'';
// il semble logique, si on cache-client, de ne pas invalider
$pa = 'statique';
}
if ($pa == 'statique'
AND $duree > 0)
$p->code .= '.\'<'.'?php header("X-Spip-Statique: oui"); ?'.'>\'';
} }
$p->interdire_scripts = false; $p->interdire_scripts = false;
......
...@@ -95,20 +95,26 @@ function cache_valide(&$page, $date) { ...@@ -95,20 +95,26 @@ function cache_valide(&$page, $date) {
if (!$page) return 1; if (!$page) return 1;
// Cache invalide par la meta 'derniere_modif' // #CACHE{n,statique} => on n'invalide pas avec derniere_modif
if ($GLOBALS['derniere_modif_invalide'] // cf. ecrire/public/balises.php, balise_CACHE_dist()
AND $date < $GLOBALS['meta']['derniere_modif']) if ($page['entetes']['X-Spip-Statique'] !== 'oui') {
return 1;
// Cache invalide par la meta 'derniere_modif'
if ($GLOBALS['derniere_modif_invalide']
AND $date < $GLOBALS['meta']['derniere_modif'])
return 1;
// Apparition d'un nouvel article post-date ?
if ($GLOBALS['meta']['post_dates'] == 'non'
AND isset($GLOBALS['meta']['date_prochain_postdate'])
AND time() > $GLOBALS['meta']['date_prochain_postdate']) {
spip_log('Un article post-date invalide le cache');
include_spip('inc/rubriques');
ecrire_meta('derniere_modif', time());
calculer_prochain_postdate();
return 1;
}
// Apparition d'un nouvel article post-date ?
if ($GLOBALS['meta']['post_dates'] == 'non'
AND isset($GLOBALS['meta']['date_prochain_postdate'])
AND time() > $GLOBALS['meta']['date_prochain_postdate']) {
spip_log('Un article post-date invalide le cache');
include_spip('inc/rubriques');
ecrire_meta('derniere_modif', time());
calculer_prochain_postdate();
return 1;
} }
// Sinon comparer l'age du fichier a sa duree de cache // Sinon comparer l'age du fichier a sa duree de 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