Browse Source

Fix #4427 : une constante _CACHE_PROFONDEUR_STOCKAGE permet de regler le nombre de fichiers cache utilise

Par defaut c'est toujours 16^4 comme avant, mais la constante peut prendre une valeur entre 2 et 8 permettant de disposer de 16^2 a 16^8 fichiers cache, repartis en 16^(_CACHE_PROFONDEUR_STOCKAGE/2) repertoires
define('_CACHE_PROFONDEUR_STOCKAGE', 3);

Au passage on deplace les cache dans un sous repertoire cache/calcul/ car le repertoire cache commence a etre encombre, et si on ne peut plus distinguer les caches de calcul par la longueur du repertoire cela devient complique a gerer pour faire des purges manuelles
Cela ne change rien pour action/purger qui de toute facon vide tout le dossier cache/ de maniere recursive (mais on pourrait sans doute etre plus subtile maintenant)
decaler_niveau_titre
Cerdic 2 years ago
parent
commit
6aa332397e
  1. 47
      ecrire/public/cacher.php

47
ecrire/public/cacher.php

@ -32,6 +32,41 @@ function generer_nom_fichier_cache($contexte, $page) {
return $u . ".cache";
}
/**
* Calcule le chemin hashe du fichier cache
* Le format souhaite : tmp/cache/ab/cd
* soit au maximum 16^4 fichiers dans 256 repertoires
* mais la longueur est configurable via un define qui permer d'avoir une taille de 16^_CACHE_PROFONDEUR_STOCKAGE
*
* Attention a modifier simultanement le sanity check de
* la fonction retire_cache() de inc/invalideur
*
* @param $nom_cache
* @return string
*/
function cache_chemin_fichier($nom_cache, $ecrire = false) {
static $l1, $l2;
if (is_null($l1)) {
$length = (defined('_CACHE_PROFONDEUR_STOCKAGE') ? min(8,max(_CACHE_PROFONDEUR_STOCKAGE,2)) : 4);
$l1 = intval(floor($length / 2));
$l2 = $length - $l1;
}
$d = substr($nom_cache, 0, $l1);
$u = substr($nom_cache, $l1, $l2);
if ($ecrire) {
$rep = sous_repertoire(_DIR_CACHE, '', false, true);
$rep = sous_repertoire($rep, 'calcul/', false, true);
$rep = sous_repertoire($rep, $d, false, true);
}
else {
// en lecture on essaye pa de creer les repertoires, on va au plus vite
$rep = _DIR_CACHE . "$d/";
}
return $rep . $u . ".cache";
}
/**
* ecrire le cache dans un casier
*
@ -40,13 +75,7 @@ function generer_nom_fichier_cache($contexte, $page) {
* @return bool
*/
function ecrire_cache($nom_cache, $valeur) {
$d = substr($nom_cache, 0, 2);
$u = substr($nom_cache, 2, 2);
$rep = _DIR_CACHE;
$rep = sous_repertoire($rep, '', false, true);
$rep = sous_repertoire($rep, $d, false, true);
return ecrire_fichier($rep . $u . ".cache", serialize(array("nom_cache" => $nom_cache, "valeur" => $valeur)));
return ecrire_fichier(cache_chemin_fichier($nom_cache, true), serialize(array("nom_cache" => $nom_cache, "valeur" => $valeur)));
}
/**
@ -56,9 +85,7 @@ function ecrire_cache($nom_cache, $valeur) {
* @return mixed
*/
function lire_cache($nom_cache) {
$d = substr($nom_cache, 0, 2);
$u = substr($nom_cache, 2, 2);
if (file_exists($f = _DIR_CACHE . "$d/$u.cache")
if (file_exists($f = cache_chemin_fichier($nom_cache))
and lire_fichier($f, $tmp)
and $tmp = unserialize($tmp)
and $tmp['nom_cache'] == $nom_cache

Loading…
Cancel
Save