Martin Granger a écrit :
Stephane LAURENT a écrit :
ben si, si tu mets du PHP dans tes squelettes, il est interprété à chaque appel !
C'est à eviter (avec des filtres) généralement, mais c'est ce qu'il faut faire dans ton cas je pense.
J'ai ca aussi sur un squelette (position aleatoire), c'est mieux que de generer 2 caches quasi-identiques (enfin, si le script est light, genre modulo 2 de microtime ...)
Vous allez rire, tous les deux, mais j'avais posté ce message après avoir cliqué 4 fois de suite en obtenant la même image ! D'où ma conclusion un peu hâtive. Depuis, je me suis aperçu qu'effectivement, ça fonctionne !
=>cache du navigateur.
Pour eviter ca, dans le .php3 appelé :
$flag_preserver=true;
@header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ;
@header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ;
// HTTP/1.0
@header('Pragma: no-cache') ;
@header("Cache-Control: no-cache, must-revalidate");
@header('Cache-Control: post-check=0, pre-check=0', false) ;
(il faut peut etre aussi balancer l'entete text/html, je sais plus)
(ca empechera egalement la barre d'admin d'apparaitre je crois)
J'ai un peu moins saisi le message de Job (vu mon faible niveau de spipage, c'est normal) : quelle est la différence entre mettre une fonction dans mes_fonctions et la mettre dans un squelette ? (à part qu'on n'a pas besoin de la récrire plusieurs fois si on veut s'en servir à plusieurs endroits, je suppose ?)
C'est pas vraiment l'emplacement qui compte mais la methode d'appel.
Si dans ton squelette, tu mets <? toto(); ?> ca sera interprété à chaque appel
Si tu mets [(#NOOP|toto)], le resultat sera mis en cache.
Le probleme, si tu utilise le cache, c'est qu'il faut en generer plusieurs et remonter le choix au niveau de l'appel du squelette (.php3 appelé directement ou via inclure)
il va donc faloir calculer un alea et le passer au contexte de facon à utiliser l'un ou l'autre des caches
en faisant un truc du genre (pastesté, pas sur de la syntaxe) :
$contexte_inclus['alea']=microtime mod 2;
Ca te generera 2 cahces qui seront appelés aléatoirement.
Mais si tu regarde bien, le modulo est de toutes facons appelé à chaque appel de la page, ca ne donc pas forcement d'interet de faire 2 caches
D'ou ma reponse : dans ce cas precis, le php dans le squelette se justifie.
@++