Skip to content
Extraits de code Groupes Projets
Valider f545c318 rédigé par Fil's avatar Fil
Parcourir les fichiers

suppression du mecanisme de fichier .NEW ; les invalideurs de taille et durée...

suppression du mecanisme de fichier .NEW ; les invalideurs de taille et durée suffisent à maintenir le CACHE à une taille raisonnable même face à des robots fous
parent bb4b7d6a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -75,14 +75,11 @@ function generer_nom_fichier_cache($contexte='', $fond='') {
// Securite : est sur que c'est un cache
function retire_cache($cache) {
if ($GLOBALS['flag_ecrire']) return;
# spip_log("kill $cache ?");
if (preg_match('|^' . _DIR_CACHE .
"([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+\.[0-9a-f]+(\.gz)?$|i",
$cache)) {
// supprimer le fichier (de facon propre)
supprimer_fichier($cache);
// et le fichier compagnon s'il existe
@unlink($cache.'.NEW');
} else
spip_log("Impossible de retirer $cache");
}
......
......@@ -19,8 +19,8 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
spip_timer('calculer_page');
$page = calculer_page($chemin_cache,
array('fond' => $fond,
'contexte' => $contexte),
array('fond' => $fond,
'contexte' => $contexte),
$delais,
$inclusion);
......@@ -32,49 +32,26 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
spip_log (($inclusion ? 'calcul inclus':'calcul').' ('
.spip_timer('calculer_page')."): $log");
// on vient d'ecrire le cache : creer un .NEW fantome qui indique
// qu'il faut changer d'invalideur a la prochaine lecture et donner
// un invalideur 't' dans 1 heure
// NB: cet invalideur connait aussi la taille du fichier
// Nouveau cache : creer un invalideur 't' fixant la date
// d'expiration et la taille du fichier
if (@file_exists($chemin_cache)) {
$bedtime = time() + 3600;
// Ici on ajoute 3600s pour eviter toute concurrence
// entre un invalideur et un appel public de page
$bedtime = time() + $delais + 3600;
$taille = @filesize($chemin_cache);
$fichier = addslashes($chemin_cache);
spip_query("INSERT IGNORE INTO spip_caches (fichier,id,type,taille)
VALUES ('$fichier','$bedtime','t','$taille')");
@touch($chemin_cache.'.NEW');
}
} else {
// Le fichier compagnon NEW existe => ce cache est utilise
// pour la premiere fois : on change alors d'invalideur 't'
// pour le rendre plus perenne
if (@file_exists($chemin_cache.'.NEW')) {
spip_log ("premier acces: $chemin_cache (.NEW)");
// Attention ne pas mettre time()+$delais mais quelque chose
// de plus grand, sinon il y a risque de concurrence entre
// l'invalideur et un appel public de page ; plus on en ajoute
// et plus le cache est gros, mais plus il procure de resistance
// aux pannes, car le cache contiendra les pages calculees
// il y a moins de $conservation secondes.
// L'invalideur initial avait pour date time()+3600 : cf.
$conservation = 3600 * 12; // intval(sqrt(3600*12*$delais)) ?
$bedtime = time() + $delais + $conservation;
$fichier = addslashes($chemin_cache);
spip_query("UPDATE spip_caches SET id='$bedtime'
WHERE fichier='$chemin_cache' AND type='t'");
if ($GLOBALS['db_ok'])
@unlink($chemin_cache.'.NEW');
}
//
// Lire le fichier cache
//
lire_fichier ($chemin_cache, $page['texte']);
$lastmodified = max($lastmodified, @filemtime($chemin_cache));
# spip_log ("cache $chemin_cache $lasmodified");
# spip_log ("cache $chemin_cache $lastmodified");
//
// Lire sa carte d'identite & fixer le contexte global
......
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