=$options['limit'])
break;
}
closedir($handle);
return $total;
}
//
// Methode : on prend un des sous-repertoires de CACHE/
// on considere qu'il fait 1/16e de la taille du cache
// et on le ratiboise en supprimant les fichiers qui n'ont pas
// ete sollicites dans l'heure qui vient de s'ecouler
//
// http://doc.spip.org/@appliquer_quota_cache
function appliquer_quota_cache() {
global $quota_cache;
$encore = false;
$tour_quota_cache = intval(1+$GLOBALS['meta']['tour_quota_cache'])%16;
ecrire_meta('tour_quota_cache', $tour_quota_cache);
$l = dechex($tour_quota_cache);
$dir = sous_repertoire(_DIR_CACHE, $l);
list($nombre,$taille) = nombre_de_fichiers_repertoire($dir);
$total_cache = $taille * $nombre;
spip_log("Taille du CACHE estimee ($l): "
.(intval(16*$total_cache/(1024*1024/10))/10)." Mo","invalideur");
// Nombre max de fichiers a supprimer
if ($quota_cache > 0
AND $taille > 0) {
$trop = $total_cache - ($quota_cache/16)*1024*1024;
$trop = 3 * intval($trop / $taille);
if ($trop > 0) {
$n = purger_repertoire($dir,
array(
'atime' => time() - _AGE_CACHE_ATIME,
'limit' => $trop,
'subdir' => true // supprimer les vieux sous repertoire de session (avant [15851])
)
);
spip_log("$dir : $n/$trop caches supprimes [taille moyenne $taille]","invalideur");
$total_cache = intval(max(0,(16*$total_cache) - $n*$taille)/(1024*1024)*10)/10;
spip_log("cache restant estime : $total_cache Mo, ratio ".$total_cache/$quota_cache,"invalideur");
// redemander la main pour eviter que le cache ne gonfle trop
// mais pas si on ne peut pas purger car les fichiers sont trops recents
if (
$total_cache/$quota_cache>1.5
AND $n*50>$trop) {
$encore = true;
spip_log("Il faut encore purger","invalideur");
}
}
}
return $encore;
}
//
// Destruction des fichiers caches invalides
//
// Securite : est sur que c'est un cache
// http://doc.spip.org/@retire_cache
function retire_cache($cache) {
if (preg_match(
"|^([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+--[0-9a-f]+(\.gz)?$|i",
$cache)) {
// supprimer le fichier (de facon propre)
supprimer_fichier(_DIR_CACHE . $cache);
} else
spip_log("Nom de fichier cache incorrect : $cache");
}
#######################################################################
##
## Ci-dessous les fonctions qui restent appellees dans le core
## pour pouvoir brancher le plugin invalideur ;
## mais ici elles ne font plus rien
##
// Supprimer les caches marques "x"
// A priori dans cette version la fonction ne sera pas appelee, car
// la meta est toujours false ; mais evitons un bug si elle est appellee
// http://doc.spip.org/@retire_caches
function retire_caches($chemin = '') {
if (isset($GLOBALS['meta']['invalider_caches']))
effacer_meta('invalider_caches'); # concurrence
}
// Pour que le compilo ajoute un invalideur a la balise #PARAMETRES_FORUM
// Noter l'invalideur de la page contenant ces parametres,
// en cas de premier post sur le forum
// http://doc.spip.org/@code_invalideur_forums
function code_invalideur_forums($p, $code) {
return $code;
}
// Fonction permettant au compilo de calculer les invalideurs d'une page
// (note: si absente, n'est pas appellee)
/*
// http://doc.spip.org/@calcul_invalideurs
function calcul_invalideurs($corps, $primary, &$boucles, $id_boucle) {
return $corps;
}
*/
// Cette fonction permet de supprimer tous les invalideurs
// Elle ne touche pas aux fichiers cache eux memes ; elle est
// invoquee quand on vide tout le cache en bloc (action/purger)
//
// http://doc.spip.org/@supprime_invalideurs
function supprime_invalideurs() { }
// Calcul des pages : noter dans la base les liens d'invalidation
// http://doc.spip.org/@maj_invalideurs
function maj_invalideurs ($fichier, &$page) { }
// pour les forums l'invalideur est : 'id_forum/a23'
// pour les petitions et autres, l'invalideur est par exemple :
// 'varia/pet60'
// http://doc.spip.org/@insere_invalideur
function insere_invalideur($inval, $fichier) { }
//
// Marquer les fichiers caches invalides comme etant a supprimer
//
// http://doc.spip.org/@applique_invalideur
function applique_invalideur($depart) { }
?>