[spip-dev] Cache : nom du fichier INDEX

Bonjour,

J'ai un pb de gestion de Cache, particulier à ma config.

J'utilise une seule version de spip, sur une seule base, sur 4 sous-domaines. Précisions plus bas.
Puisque c'est une unique base, les articles sont uniques, différenciés, et répartis sur les différents sous-domaines.

En cache, les articles sont nommés par exemple inc-13-19....
13 pour rubrique et 19 pour article.

Pb : les pages racines de sous-domaines pointent sur le même fichier en cache, bien que ce soient des articles différents.
Le fichier s'appelle CACHE/6/INDEX-.666cd7

D'où la question :
* Comment est créé le nom de ce fichier de cache pour l'index ??? *.
Sur quels paramètres puis-je jouer pour différencier les noms des fichiers de cache d'index selon les sous-domaines ??

Merci !

*** Architecture de mon hébergement.

L'architecture de dossiers de l'hébergement est :
/data
   + public
      + boisroche
      + genelec
      + tifayne
      + www
   + stats

http://www.team-santonum.com
est le domaine principal contenant spip et les squelettes.

http://boisroche.team-santonum.com
http://tifayne.team-santonum.com
http://genelec.team-santonum.com

Dans chaque sous-domaine, un .htaccess du type :
* sous boisroche
     RewriteRule ^$
       spip_redirect.php?target=article&id_article=53 [QSA,L]
     RewriteRule ^(.*)-art([0-9]+)\.html$
        spip_redirect.php?target=article&id_article=$2 [QSA,L]

* sous tifayne
     RewriteRule ^$
       spip_redirect.php?target=article&id_article=50 [QSA,L]
     RewriteRule ^(.*)-art([0-9]+)\.html$
        spip_redirect.php?target=article&id_article=$2 [QSA,L]

Donc par la suite, les _squelettes sont bien appelés sur chaque sous-domaine, SAUF pour la racine du site, dans laquelle l'URL n'est pas explicite.

Bonjour,

Stéphane Santon a écrit :

* Comment est créé le nom de ce fichier de cache pour l'index ??? *.

Bon, en fait, j'ai cherché un peu ...

Dans inc-public-global.php [L:24], on trouve :

function inclure_fichier($fond, $delais, $contexte_inclus = "") {
   $fichier_requete = $fond;
   [...]
   $fichier_cache = generer_nom_fichier_cache($fichier_requete);
   $chemin_cache = "CACHE/$fichier_cache";

alors ... dans inc-cache.php [L:13] :

function generer_nom_fichier_cache($fichier_requete) {
   global $HTTP_POST_VARS;

   $md_cache = md5($fichier_requete);
   [...]
   if (!$fichier_cache)
     $fichier_cache = 'INDEX-'; // *HA HA HA !!!!*

J'ai ajouté juste avant ceci :

   //echo "[Req=$fichier_requete]";

Et je vois que ^fichier_requete vaut seulement '/', donc normal que les 2 soient sur le même cache !

Alors d'où vient $fichier_requete ?
Selon le début de ma recherche, il viendrait de $fond.
Or j'ai bien appelé article.php donc $fond = "article" !

Je continue l'investigation ...

Et je vois que ^fichier_requete vaut seulement '/', donc normal que les
2 soient sur le même cache !

Alors d'où vient $fichier_requete ?
Selon le début de ma recherche, il viendrait de $fond.

Non, il vient de la partie locale de l'adresse de ta *page*, indépendamment
des RewriteRules que tu as pu faire.

La page http://toto/xxx donnera donc lieu à une recherche du cache
correspondant à la partie "/xxx"

Tu peux essayer d'ajouter dans $fichier_requete une chaine caractéristique
du serveur appelé (par exemple en faisant :
$fichier_requete = $GLOBALS['HTTP_HOST'] . $fichier_requete;

-- Fil

Bonjour,

Fil a écrit :

Alors d'où vient $fichier_requete ?

Non, il vient de la partie locale de l'adresse de ta *page*, indépendamment
des RewriteRules que tu as pu faire.

OK ! Merci !

On a dans inc-public-global [L:57] :

$fichier_requete = $REQUEST_URI;
et le retour pour la racine est effectivement

    /
ou /?recalcul=oui

J'ai donc ajouté :

$_SERVER[ 'REQUEST_URI'] =
   ereg_replace( "^\/\?(.*)", "/index-art{$_GET['id_article']}.html?\\1",
  $_SERVER[ 'REQUEST_URI']);

$_SERVER[ 'REQUEST_URI'] =
   ereg_replace( "^\/$", "/index-art{$_GET['id_article']}.html",
  $_SERVER[ 'REQUEST_URI']);

Et ça a l'air de marcher.

Aïe mal vu... Ca marche pas...

Il faut que je l'affecte à $REQUEST_URI,
qui semble égal à $GLOBALS['REQUEST_URI'] ,
mais différent de $_SERVER['REQUEST_URI'] !

J'arrive bien à l'affecter à $_SERVER mais pas à $GLOBALS, même avec

$REQUEST_URI = $_SERVER[ 'REQUEST_URI'];
$GLOBALS[ 'REQUEST_URI'] = $_SERVER[ 'REQUEST_URI'];

! Y a-t-il une protection en écriture de ces variables ???

Stéphane Santon a écrit :

Hi,

Bon, j'ai mis mes ereg dans inc-public-global directement sur $fichier_requete, mais j'aurais aimé ne pas avoir à modifier ce fichier...

Stéphane Santon a écrit :