[Spip] reinventer la roue

Salut,

j'ai réinventé la roue hier. Unifié les bases de données revues, sites,
glossaire, etc. et fait des procédures communes pour les gérer. Bref, j'ai
refait (en moins bien) ce qu'est censé faire PHP/mySQL, mais sans mySQL.

Beaucoup de mes pages sont, du coup, complexes en PHP et générées "à la
volée", alors qu'elles sont essentiellement statiques. Question : comment
faire un système de "cache" efficace ? Hacker httpd.conf ?

ci-dessous le fichier au coeur du systeme : il contient des procédures
capables de lire mes bases de données et d'en rendre certains éléments. La
structure de toutes ces bases est (texte tabulé)

code | titre | date | mots-cles | url | descri | compl | sources | credits

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<?php
if (! $okbases) { $okbases = 1;

function analyse_ligne ($ligne){
  $ligne=supguill($ligne);
  $entree = explode("\t", $ligne);
  if (ereg(":",$entree[0],$regs)){
    $entree2= explode(":",$entree[0]);
    $ligne = trim($entree2[0]);
    $code = trim($entree2[1]);
  }else{
    $ligne = 0;
    $code = trim($entree[0]);
  }
  $titre = trim($entree[1]);
  $date = trim($entree[2]);
  $mots = explode(";",$entree[3]);
  $url = trim($entree[4]);
  if ($url){
    $url = fusionurl("http://www.monde-diplomatique.fr/dossiers",$url);
  }
  $descri1= trim($entree[5]);
  $descri2= trim($entree[6]);
  $sources= trim($entree[7]);
  $credits= trim($entree[8]);

  return array($code,$titre,$date,$mots,
    $url,$descri1,$descri2,$sources,$credits,$ligne);
}

function composebreve ($type, $valeurs)
{
global $reference;
global $folder;

  if ($valeurs[1] == "___"){
    $breve = "<TR><TD width=60>&nbsp;<TD><TR><TD valign=top><B>$valeurs[0]</B><TD valign=top>";
  }else{
    if ($type == "titrecode") {
      $breve = "<A HREF=\"$valeurs[0]\">$valeurs[1]</A>";
    } elseif ($type == "titreurl") {
      $breve = "<A HREF=\"$valeurs[4]\">$valeurs[1]</A>";
    } elseif ($type == "glossaire") { // afficher element du glossaire
      $breve = $valeurs[5];
      if ($valeurs[4]){
        $breve .= " - <A HREF=\"$valeurs[4]\">$valeurs[4]</A>";
      }
      if ($valeurs[2] && $reference){
        $breve .= "<P>&nbsp;<P><small>$reference".
          affdate($valeurs[2]).
          "</small>";
      }
    } elseif ($type == "eleglossaire") { // breve provenant du glossaire
      $breve = "<A HREF=\"/$folder$valeurs[0]\">$valeurs[1]</A>";
      $breve = $breve."&nbsp;/ ";
    } elseif ($type == "elerevue") { // titre revue
      $breve = "<A HREF=\"/$folder$valeurs[0]\">$valeurs[1]</A>";
      if (eregi("^http:",$valeurs[4],$regs)){
        $breve = "<B>$breve</B>";
      }elseif (eregi("^mailto:",$valeurs[4],$regs)){
        $breve = "<I>$breve</I>";
      }
      $breve = $breve."&nbsp;/ ";
    } elseif ($type == "revuesans") { // description revue sans date
      $breve = "<B>$valeurs[1].</B> $valeurs[5] <B>$valeurs[6]</B>";
      if ($valeurs[4]){
        $breve .= " - <A HREF=\"$valeurs[4]\">$valeurs[4]</A>";
      }
    } elseif ($type == "revue") { // description revue
      $breve = "$valeurs[5] <B>$valeurs[6]</B>";
      if ($valeurs[4]){
        $breve .= " - <A HREF=\"$valeurs[4]\">$valeurs[4]</A>";
      }
      if ($valeurs[2] && $reference){
        $breve .= "<P>&nbsp;<P><small>$reference".
          affdate($valeurs[2]).
          "</small>";
      }
    } elseif ($type == "menu") {
      $breve = "<option value=\"$valeurs[4]\">$valeurs[1]</option>";
    } elseif ($type == "site") {
      $breve = "<A HREF=\"$valeurs[4]\">$valeurs[1]</A>. - $valeurs[5]";
    } elseif ($type == "dossier") {
      $breve = "<B><A HREF=\"$valeurs[4]\">$valeurs[1]</A></B>";
      if ($valeurs[5]) {
        $comment = $valeurs[5];
      } else {
        $comment = "dossier du ".affdate($valeurs[2]);
      }
      $breve .= "<BR><small>&nbsp; &nbsp; $comment</small>\n";
    }
  }
  return $breve;
}

function breves_par_sujet ($p,$bases,$separateur,$type="titrecode")
{
  $numero=0;
  ereg("([a-z]+)",$p,$regs); $p = $regs[1]; // nettoyer le sujet
  if ($p) {
          $fp = popen("grep -ihn $p $bases","r"); // les bonnes lignes
          while ($lig = fgets($fp,4096)){
      $valeurs = analyse_ligne ($lig);
      while (list( $cle, $pays ) = each( $valeurs[3])) {
        if (trim($pays)==$p) {
          $breve=composebreve($type,$valeurs);
          if ($breve) {
            $texte .= $separateur.$breve;
            if ($numero == 0) {
              $numero = $valeurs[9];
            }
          }
        }
      }
    }
  }
  return array($texte,$numero);
}

function breves_par_date ($p,$bases,$separateur,$type="titrecode")
{
  ereg("([0-9]+-[0-9]+)",$p,$regs); $p = $regs[1]; // nettoyer le sujet
  if ($p) {
          $fp = popen("grep -ihn $p $bases","r"); // les bonnes lignes
          while ($lig = fgets($fp,4096)){
      $valeurs = analyse_ligne ($lig);
      $date = $valeurs[2];
      if ($date == $p) {
        $breve=composebreve($type,$valeurs);
        if ($breve) {
          $texte .= $separateur.$breve;
        }
      }
    }
  }
  return array($texte,0);
}

function breves_par_nombre ($n,$bases,$separateur,$type="titrecode")
{
  $fp = fopen($bases,"r");
  while ($n-- > 0 && $lig = fgets($fp,4096)){
    $valeurs = analyse_ligne ($lig);
    $breve=composebreve($type,$valeurs);
    if ($breve) {
      $texte .= $separateur.$breve;
    }
  }
  return array($texte,0);
}

function breves_par_code ($code,$bases,$separateur,$type="titrecode")
{
global $prendletitrelong;

  ereg("([a-z]+)",$code,$regs); $code = $regs[1]; // nettoyer le code
  $fp = popen("grep -ihn '$code' $bases","r");
  while ($lig = fgets($fp,4096)){
    $valeurs = analyse_ligne ($lig);
    if ($valeurs[0] == $code){
      $breve=composebreve($type,$valeurs);
      if ($breve) {
        $texte .= $separateur.$breve;
        $titre = $valeurs[1];
        if ($prendletitrelong && $valeurs[6]) $titre = $valeurs[6];
      }
    }
  }
  return array($texte,$titre);
}

}// okbases
?>