From 9e742668716de0a419a0267a7f665a85ccbf8950 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sun, 29 Jan 2006 20:45:48 +0000 Subject: [PATCH] Nouvelle interface avec les fonctions du cache, pour pouvoir eventuellement decide de la perennite d'un cache sur la base de son contenu --- inc-cache.php3 | 36 +++++++++++++++++++++------- inc-public-global.php3 | 54 ++++++++++++------------------------------ 2 files changed, 43 insertions(+), 47 deletions(-) diff --git a/inc-cache.php3 b/inc-cache.php3 index 9774fd98c4..0078eb45e5 100644 --- a/inc-cache.php3 +++ b/inc-cache.php3 @@ -125,16 +125,16 @@ function retire_caches($chemin = '') { // > 0 s'il faut calculer la page et le mette en cache pendant N secondes // -function cache_valide($chemin_cache) { +function cache_valide($chemin_cache, $contenu, $date) { global $delais; if (!isset($delais)) $delais = 3600; if (!$delais) return -1; - if (!file_exists($chemin_cache)) return $delais; + if (!$contenu) return $delais; - if ((time() - @filemtime($chemin_cache)) > $delais) return $delais; + if ((time() - $date) > $delais) return $delais; return 0; } @@ -153,7 +153,7 @@ function determiner_cache(&$use_cache, $contexte, $fond) { // cas ignorant le cache car complement dynamique if ($_SERVER['REQUEST_METHOD'] == 'POST') { $use_cache = -1; - return ""; + return array('','',0); } $chemin_cache = generer_nom_fichier_cache($contexte, $fond); @@ -161,7 +161,7 @@ function determiner_cache(&$use_cache, $contexte, $fond) { // cas sans jamais de calcul pour raison interne if ($_SERVER['REQUEST_METHOD'] == 'HEAD') { $use_cache = 0; - return $chemin_cache; + return array($chemin_cache, @filemtime($chemin_cache), 0); } // Faut-il effacer des pages invalidees (en particulier ce cache-ci) ? @@ -179,9 +179,12 @@ function determiner_cache(&$use_cache, $contexte, $fond) { supprimer_fichier($chemin_cache); } - $use_cache = cache_valide($chemin_cache); + $ok = lire_fichier($chemin_cache, $page); + $time = @filemtime($chemin_cache); + $page = restaurer_meta_donnees ($page); + $use_cache = cache_valide($chemin_cache, $page, $time); - if (!$use_cache) return $chemin_cache; + if (!$use_cache AND $ok) return array($chemin_cache, $page, $time); // Si pas valide mais pas de connexion a la base, le garder quand meme @@ -195,7 +198,7 @@ function determiner_cache(&$use_cache, $contexte, $fond) { } } - return ($use_cache < 0) ? "" : $chemin_cache; + return array((($use_cache < 0) ? "" : $chemin_cache), $page, $time); } // Passage par reference juste par souci d'economie @@ -230,6 +233,23 @@ function creer_cache(&$page, $chemin_cache, $duree) { } } +function restaurer_meta_donnees ($contenu) { + + if (preg_match("/^<!-- ([^\n]*) -->\n/ms", $contenu, $match)) { + $meta_donnees = unserialize($match[1]); + if (is_array($meta_donnees)) { + foreach ($meta_donnees as $var=>$val) { + $page[$var] = $val; + } + } + + } + + $page['texte'] = substr($contenu, strlen($match[0])); + return $page; +} + + // purger un petit cache (tidy ou recherche) qui ne doit pas contenir de // vieux fichiers function nettoyer_petit_cache($prefix, $duree = 300) { diff --git a/inc-public-global.php3 b/inc-public-global.php3 index 59710dbca2..17a51e08f7 100644 --- a/inc-public-global.php3 +++ b/inc-public-global.php3 @@ -68,38 +68,14 @@ function calcule_header_et_page ($fond) { } -function obtenir_page_ancienne ($chemin_cache, $fond, $inclusion=false) { - - global $lastmodified ; - // - // Lire le fichier cache - // - lire_fichier ($chemin_cache, $page['texte']); - $lastmodified = max($lastmodified, @filemtime($chemin_cache)); - # spip_log ("cache $chemin_cache $lastmodified"); - - // - // Lire sa carte d'identite & fixer le contexte global - // - if (preg_match("/^<!-- ([^\n]*) -->\n/ms", $page['texte'], $match)) { - $meta_donnees = unserialize($match[1]); - if (is_array($meta_donnees)) { - foreach ($meta_donnees as $var=>$val) { - $page[$var] = $val; - } - } - - $page['texte'] = substr($page['texte'], strlen($match[0])); +// Remplir les globals pour les boutons d'admin - // Remplir les globals pour les boutons d'admin - if (!$inclusion AND is_array($page['contexte'])) { - foreach ($page['contexte'] as $var=>$val) { - $GLOBALS[$var] = $val; - } +function restaurer_globales ($contexte) { + if (!is_array($contexte)) { + foreach ($contexte as $var=>$val) { + $GLOBALS[$var] = $val; } } - - return $page; } function is_preview() @@ -122,11 +98,10 @@ function afficher_page_globale ($fond) { include_local("inc-cache"); // Peut-on utiliser un fichier cache ? - $chemin_cache = determiner_cache($use_cache, NULL, $fond); - if ($chemin_cache) - $lastmodified = @filemtime($chemin_cache); - else - $lastmodified = time(); + list($chemin_cache, $page, $lastmodified) = + determiner_cache($use_cache, NULL, $fond); + + if (!$chemin_cache) $lastmodified = time(); // demande de previsualisation ? // -> inc-calcul n'enregistrera pas les fichiers caches @@ -162,7 +137,7 @@ function afficher_page_globale ($fond) { $page['entetes']["Connection"] = "close"; } else { if (!$use_cache) - $page = obtenir_page_ancienne ($chemin_cache, $fond, false); + restaurer_globales($page['contexte']); else { include_local('inc-calcul'); $page = calculer_page_globale ($chemin_cache, $fond); @@ -239,7 +214,8 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') { global $lastmodified; // Peut-on utiliser un fichier cache ? - $chemin_cache = determiner_cache($use_cache, $contexte_inclus, $fond); + list($chemin_cache, $page, $lastinclude) = + determiner_cache($use_cache, $contexte_inclus, $fond); // Si on a inclus sans fixer le critere de lang, de deux choses l'une : // - on est dans la langue du site, et pas besoin d'inclure inc_lang @@ -259,9 +235,9 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') { $contexte_inclus['date_redac'] = $contexte_inclus['date']; // On va ensuite chercher la page - if (!$use_cache) - $page = obtenir_page_ancienne ($chemin_cache, $fond, false); - else { + if (!$use_cache) { + $lastmodified = max($lastmodified, $lastinclude); + } else { include_local('inc-calcul'); $page = cherche_page($chemin_cache, $contexte_inclus, $fond, false); $lastmodified = time(); -- GitLab