[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/ecrire/ -> inc_invalideur.php3 (source)

   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  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7