X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Finvalideur.php;fp=www%2Fecrire%2Finc%2Finvalideur.php;h=19c7338a0c9877c3cb7a8e3f08b801b027609c5a;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/invalideur.php b/www/ecrire/inc/invalideur.php new file mode 100644 index 0000000..19c7338 --- /dev/null +++ b/www/ecrire/inc/invalideur.php @@ -0,0 +1,261 @@ +=$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) { } + +?>