Skip to content
Extraits de code Groupes Projets
Valider 9e742668 rédigé par esj's avatar esj
Parcourir les fichiers

Nouvelle interface avec les fonctions du cache, pour pouvoir eventuellement...

Nouvelle interface avec les fonctions du cache, pour pouvoir eventuellement decide de la perennite d'un cache sur la base de son contenu
parent f4cca4fd
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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) {
......
......@@ -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();
......
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