[ Index ] |
|
Code source de SPIP 1.8.3 |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2005 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 // Ce fichier ne sera execute qu'une fois 15 if (defined("_ECRIRE_INVALIDEUR")) return; 16 define("_ECRIRE_INVALIDEUR", "1"); 17 18 include_ecrire ('inc_serialbase.php3'); 19 20 function supprime_invalideurs() { 21 spip_query("DELETE FROM spip_caches"); 22 } 23 24 25 // Compilateur : ajouter un invalideur "$type/$valeur" a un code donne 26 // Attention le type est compile, pas forcement la valeur 27 function ajouter_invalideur($type, $valeur, $code) { 28 return ' 29 // invalideur '.$type.' 30 (!($Cache[\''.$type.'\']['.$valeur."]=1) ? '':\n\t" . $code .")\n"; 31 } 32 33 34 // 35 // Calcul des pages : noter dans la base les liens d'invalidation 36 // 37 function maj_invalideurs ($fichier, $invalideurs, $delais) { 38 $fichier = addslashes($fichier); #parano 39 if ($fichier == '') return; // ne pas noter les POST et les delais=0 40 spip_query("DELETE FROM spip_caches WHERE fichier='$fichier'"); 41 42 // invalidation des forums (l'invalideur est : 'id_forum/a23') 43 insere_invalideur($invalideurs['id_forum'], 'id_forum', $fichier); 44 45 // invalidation des petitions et autres 46 // (l'invalideur est par exemple : 'varia/petition') 47 insere_invalideur($invalideurs['varia'], 'varia', $fichier); 48 49 // invalidation du reste - experimental a activer dans mes_options 50 if ($GLOBALS['invalider_caches']) { 51 insere_invalideur($invalideurs['id_article'],'id_article', $fichier); 52 insere_invalideur($invalideurs['id_breve'], 'id_breve', $fichier); 53 insere_invalideur($invalideurs['id_rubrique'],'id_rubrique', $fichier); 54 insere_invalideur($invalideurs['id_syndic'],'id_syndic', $fichier); 55 } 56 } 57 58 function insere_invalideur($a, $type, $fichier) { 59 if (is_array($a)) { 60 $values = array(); 61 foreach($a as $k => $v) 62 $values[] = "('$fichier', '$type/$k')"; 63 spip_query ("INSERT IGNORE INTO spip_caches 64 (fichier, id) VALUES " . join(", ", $values)); 65 } 66 } 67 68 69 // 70 // Invalider les caches lies a telle condition 71 // 72 function suivre_invalideur($cond) { 73 $result = spip_query("SELECT DISTINCT fichier FROM spip_caches WHERE $cond"); 74 $tous = array(); 75 while ($row = spip_fetch_array($result)) 76 $tous[] = $row['fichier']; 77 78 spip_log("suivre $cond"); 79 applique_invalideur($tous); 80 } 81 82 83 // 84 // Supprimer les vieux caches 85 // 86 function retire_vieux_caches() { 87 $condition = "type='t' AND id<".time(); 88 suivre_invalideur($condition); 89 } 90 91 92 // 93 // Marquer les fichiers caches invalides comme etant a supprimer 94 // 95 function applique_invalideur($depart) { 96 97 if ($depart) { 98 $tous = "'".join("', '", $depart)."'"; 99 spip_log("applique $tous"); 100 101 spip_query("UPDATE spip_caches SET type='x'" 102 . ' WHERE ' . calcul_mysql_in('fichier', $tous)); 103 104 // Demander a inc-public.php3 de retirer les caches 105 // invalides ; 106 // - le signal (meta='invalider') indique 107 // qu'il faut faire attention ; 108 // - le signal (meta='invalider_caches') indique qu'on 109 // peut effacer 100 caches invalides 110 // (Signaux differents pour eviter de la concurrence entre 111 // les processus d'invalidation) 112 ecrire_meta('invalider', 'oui'); // se verifier soi-meme 113 ecrire_meta('invalider_caches', 'oui'); // supprimer les autres 114 ecrire_metas(); 115 if (_DIR_RESTREINT) { 116 include_local('inc-cache.php3'); 117 retire_caches(); 118 } 119 } 120 } 121 122 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |