From e6092f277e425faad9aa4b2424bd7c8801e02460 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Wed, 1 Feb 2006 17:53:44 +0000 Subject: [PATCH] =?UTF-8?q?#HTTP=20se=20s=C3=A9pare=20en=20deux=20balises?= =?UTF-8?q?=20:=20-=20#HTTP=5FHEADER{Chose:=20valeur}=20qui=20ins=C3=A8re?= =?UTF-8?q?=20un=20entete=20dans=20le=20tableau=20$page[entetes]=20(ceci?= =?UTF-8?q?=20toujours=20via=20le=20hack=20d'insertion=20de=20la=20sequenc?= =?UTF-8?q?e=20<=3Fphp=20header(...)=20=3F>=20dans=20le=20code,=20qui=20es?= =?UTF-8?q?t=20ensuite=20nettoy=C3=A9e)=20-=20#CACHE{delai}=20qui=20fixe?= =?UTF-8?q?=20la=20dur=C3=A9e=20du=20fichier=20cache.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A noter qu'on peut mixer les deux de façon parfois étonnante comme sur le login, où le fichier est mis en cache côté spip, mais pas côté navigateur --- dist/404.html | 5 +++- dist/agenda.html | 2 +- dist/article.html | 2 +- dist/auteur.html | 2 +- dist/backend.html | 10 ++++---- dist/breve.html | 2 +- dist/distrib.html | 3 ++- dist/forum.html | 4 +++- dist/ical.html | 3 ++- dist/login.html | 14 ++++++++++- dist/mot.html | 2 +- dist/plan.html | 2 +- dist/recherche.html | 2 +- dist/resume.html | 2 +- dist/rubrique.html | 2 +- dist/site.html | 2 +- dist/sommaire.html | 2 +- dist/sommaire_texte.html | 2 +- dist/style.html | 4 +++- ecrire/inc_filtres.php | 14 ++++++++++- inc-balises.php3 | 52 +++++++++++++++++++++++++++++----------- inc-calcul.php3 | 27 ++++++++++++--------- 22 files changed, 112 insertions(+), 48 deletions(-) diff --git a/dist/404.html b/dist/404.html index f7eebc16ec..a7daca60ba 100644 --- a/dist/404.html +++ b/dist/404.html @@ -1,4 +1,7 @@ -#HTTP{"Cache-Control: no-store, no-cache, must-revalidate","Pragma: no-cache"} +#CACHE{24 * 3600} +#HTTP_HEADER{Cache-Control: no-store, no-cache, must-revalidate} +#HTTP_HEADER{Pragma: no-cache} + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/agenda.html b/dist/agenda.html index 27be563918..b1837923ff 100644 --- a/dist/agenda.html +++ b/dist/agenda.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/article.html b/dist/article.html index 6723ee0ab9..fcee57a820 100644 --- a/dist/article.html +++ b/dist/article.html @@ -1,4 +1,4 @@ -#HTTP{86400} +#CACHE{86400} <BOUCLE_article_principal(ARTICLES) {id_article}><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/auteur.html b/dist/auteur.html index 3932bb0576..824a3c4361 100644 --- a/dist/auteur.html +++ b/dist/auteur.html @@ -1,4 +1,4 @@ -#HTTP{86400} +#CACHE{86400} <BOUCLE_auteur_principal(AUTEURS) {id_auteur} ><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> diff --git a/dist/backend.html b/dist/backend.html index 5da6c9ce3a..479a3c9899 100644 --- a/dist/backend.html +++ b/dist/backend.html @@ -1,7 +1,5 @@ -<?php @header("Content-type: text/xml[; charset=(#CHARSET)]"); - @header('Cache-Control: max-age=3600'); - echo '<'.'?xml version="1.0"[ encoding="(#CHARSET)"]?'.">\n"; -?> +#CACHE{3600} +[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})] <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" @@ -14,6 +12,10 @@ <language>#LANG</language> <generator>SPIP - www.spip.net</generator> +#LOGO_SITE_SPIP + +[(#LOGO_SITE_SPIP||extraire_attribut{src})] + [ <image> <title>[(#NOM_SITE_SPIP|texte_backend)]</title> <url>(#LOGO_SITE_SPIP||extraire_attribut{src}|url_absolue|texte_backend)</url> diff --git a/dist/breve.html b/dist/breve.html index 1ca2d4bb19..a953841557 100644 --- a/dist/breve.html +++ b/dist/breve.html @@ -1,4 +1,4 @@ -#HTTP{43200} +#CACHE{43200} <BOUCLE_breve_principal(BREVES) {id_breve} ><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> diff --git a/dist/distrib.html b/dist/distrib.html index e719dadb05..1554646627 100644 --- a/dist/distrib.html +++ b/dist/distrib.html @@ -1,4 +1,5 @@ -#HTTP{"Content-Type: text/javascript", 'Cache-Control: max-age = 3600'} +#CACHE{3600} +#HTTP_HEADER{Content-Type: text/javascript} document.write('<table border="0" bgcolor="#000000" cellspacing="0" cellpadding="0"><tr><td>'); document.write('<table border="0" bgcolor="#ffffff" cellspacing="1" cellpadding="2"><tr><td bgcolor="#d0d0d0" align="center">'); document.write('<a href="#URL_SITE_SPIP/"><b>[(#NOM_SITE_SPIP|addslashes)]</b></a> </td></tr><tr><td><ul><small>'); diff --git a/dist/forum.html b/dist/forum.html index 5ba053e938..083ede9e18 100644 --- a/dist/forum.html +++ b/dist/forum.html @@ -1,4 +1,6 @@ -#HTTP{"Cache-Control: max-age=3600, must-revalidate"} +#CACHE{3600} +#HTTP_HEADER{Cache-Control: max-age=3600, must-revalidate} + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/ical.html b/dist/ical.html index 34ff903a2f..005625c010 100644 --- a/dist/ical.html +++ b/dist/ical.html @@ -1,4 +1,5 @@ -#HTTP{"Content-type: text/calendar", 3600} +#HTTP_HEADER{Content-type: text/calendar} +#CACHE{3600} BEGIN:VCALENDAR CALSCALE:GREGORIAN X-WR-CALNAME;VALUE=TEXT:[(#NOM_SITE_SPIP|filtrer_ical)] diff --git a/dist/login.html b/dist/login.html index 589b60c741..97a8118538 100644 --- a/dist/login.html +++ b/dist/login.html @@ -1,4 +1,11 @@ -#HTTP{"Cache-Control: no-store, no-cache, must-revalidate","Pragma: no-cache"} +[(#REM) + Le fichier est en cache dans SPIP, mais les navigateurs ne doivent pas + conserver cette page en memoire +] +#CACHE{24 * 3600} +#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"} +#HTTP_HEADER{Pragma: no-cache} + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> @@ -39,5 +46,10 @@ </td></tr></table></div> +[(#REM) + Esthetique : on ne veut pas des boutons d'admin sur la page de login +]<!-- +#FORMULAIRE_ADMIN +--> </body> </html> diff --git a/dist/mot.html b/dist/mot.html index 9a9f60ab13..a85c1edf88 100644 --- a/dist/mot.html +++ b/dist/mot.html @@ -1,4 +1,4 @@ -#HTTP{86400} +#CACHE{86400} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/plan.html b/dist/plan.html index 51e065c90b..4730117315 100644 --- a/dist/plan.html +++ b/dist/plan.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/recherche.html b/dist/recherche.html index 65ea56e0ee..0ce7ae5139 100644 --- a/dist/recherche.html +++ b/dist/recherche.html @@ -1,4 +1,4 @@ -#HTTP{"Cache-Control: no-store, no-cache, must-revalidate","Pragma: no-cache"} +#CACHE{0} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> diff --git a/dist/resume.html b/dist/resume.html index 063ef3d652..a876a77a8c 100644 --- a/dist/resume.html +++ b/dist/resume.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/rubrique.html b/dist/rubrique.html index 6eb73417ac..964709fb3b 100644 --- a/dist/rubrique.html +++ b/dist/rubrique.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <BOUCLE_rubrique_principal(RUBRIQUES) {id_rubrique} ><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> diff --git a/dist/site.html b/dist/site.html index be9bf170de..6953b547af 100644 --- a/dist/site.html +++ b/dist/site.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <BOUCLE_site(SITES){id_syndic} ><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> diff --git a/dist/sommaire.html b/dist/sommaire.html index 36c9e66f1d..2d725baa98 100644 --- a/dist/sommaire.html +++ b/dist/sommaire.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <head> diff --git a/dist/sommaire_texte.html b/dist/sommaire_texte.html index 3416fbf018..76bd9bdf61 100644 --- a/dist/sommaire_texte.html +++ b/dist/sommaire_texte.html @@ -1,4 +1,4 @@ -#HTTP{7200} +#CACHE{7200} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="#LANG_DIR" lang="#LANG"> <!-- diff --git a/dist/style.html b/dist/style.html index e720c66be3..b01052aec9 100644 --- a/dist/style.html +++ b/dist/style.html @@ -1,4 +1,3 @@ -#HTTP{'Content-type: text/css', 'Vary: Accept-Encoding', 360000} [(#REM) Ce squelette definit les styles de l'espace prive @@ -8,6 +7,9 @@ genant en cas de "rotation du cookie de session" apres un changement d'IP (effet de clignotement). ] +#CACHE{360*1000} +#HTTP_HEADER{Content-Type: text/css} +#HTTP_HEADER{Vary: Accept-Encoding} /* * Police par defaut (bof...) diff --git a/ecrire/inc_filtres.php b/ecrire/inc_filtres.php index 0f49ebf3c1..61df0e8bba 100644 --- a/ecrire/inc_filtres.php +++ b/ecrire/inc_filtres.php @@ -1683,7 +1683,7 @@ function alterner($i) { } // recuperer une balise HTML de type "xxx" -// exemple : [(#DESCRIPTIF|extraire_attribut{img})] (pour flux RSS-photo) +// exemple : [(#DESCRIPTIF|extraire_tag{img})] (pour flux RSS-photo) function extraire_tag($texte, $tag) { if (preg_match(",<$tag(\\s.*)?".">,Uims", $texte, $regs)) return $regs[0]; @@ -1693,6 +1693,10 @@ function extraire_tag($texte, $tag) { // recuperer un attribut html d'une balise // ($complet demande de retourner $r) function extraire_attribut($balise, $attribut, $complet = false) { + +var_dump($balise); +var_dump($attribut); + if (preg_match(",(.*<[^>]*)([[:space:]]+$attribut=[[:space:]]*(['\"])?(.*?)\\3)([^>]*>.*),ims", $balise, $r)) { $att = $r[4]; } @@ -2124,4 +2128,12 @@ function boutonne($t, $n, $v, $a='') { . " value=\"$v\" $a />"; } +// valeur_numerique("3*2") => 6 +// n'accepte que les *, + et - (a ameliorer si on l'utilise vraiment) +function valeur_numerique($expr) { + if (preg_match(',^[0-9]+(\s*[+*-]\s*[0-9]+)*$,', trim($expr))) + eval("\$a = $expr;"); + return intval($a); +} + ?> diff --git a/inc-balises.php3 b/inc-balises.php3 index 0e7522567c..4b5212e62b 100644 --- a/inc-balises.php3 +++ b/inc-balises.php3 @@ -776,22 +776,46 @@ function balise_REM_dist($p) { return $p; } + // -// #HTTP -// pour les entetes. A n'utiliser qu'en debut de squelette +// #HTTP_HEADER +// pour les entetes de retour http +// Ne fonctionne pas sur les INCLURE ! +// #HTTP_HEADER{Content-Type: text/css} // -function balise_HTTP_dist($p) { - $a = $p->param[0]; - array_shift($a); - $code = ""; - foreach($a as $v) { - if (is_numeric($h = $v[0]->texte)) - $h = "Cache-Control: max-age=$h"; - $code .= 'header("' . $h . '");'; - } - $p->code="('<'.'?php $code ?' . '>')"; - $p->interdire_scripts = false; - return $p; +function balise_HTTP_HEADER_dist($p) { + + $header = calculer_liste($p->param[0][1], + $p->descr, + $p->boucles, + $p->id_boucle); + + $p->code = "'<'.'?php header(\"' . " + . $header + . " . '\"); ?'.'>'"; + $p->interdire_scripts = false; + return $p; +} + +// +// #CACHE +// definit la duree de vie ($delais) du squelette +// #CACHE{24*3600} +function balise_CACHE_dist($p) { + $duree = valeur_numerique($p->param[0][1][0]->texte); + if ($duree > 0) + $p->code = '\'<'.'?php header("Cache-Control: max-age=' + . $duree + . '"); ?'.'>\''; + else + $p->code = '\'<' + .'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?' + .'><' + .'?php header("Pragma: no-cache"); ?' + .'>\''; + + $p->interdire_scripts = false; + return $p; } ?> diff --git a/inc-calcul.php3 b/inc-calcul.php3 index 1b51c938cc..ca4902e95c 100644 --- a/inc-calcul.php3 +++ b/inc-calcul.php3 @@ -256,20 +256,25 @@ function calculer_page_globale($cache, $fond) { return $page; } -function analyse_resultat_skel($nom, $Cache, $corps) -{ +function analyse_resultat_skel($nom, $Cache, $corps) { $headers = array(); - while (preg_match('/^(<[?]php\s+)@?header\s*\(\s*.([^:]*):\s*([^)]*)[^)]\s*\)\s*[;]?/ims',$corps, $r)) - { - $corps = $r[1] . substr($corps,strlen($r[0])); - $j=str_replace(' - ','-',ucwords(str_replace('-',' - ',$r[2]))); - $headers[$j] = $r[3]; - } - if (preg_match('/^<[?]php\s+[?]>\s*/', $corps, $r)) - $corps = substr($corps,strlen($r[0])); + + // Recupere les < ?php header('Xx: y'); ? > pour $page['headers'] + // note: on essaie d'attrapper aussi certains de ces entetes codes + // "a la main" dans les squelettes, mais evidemment sans exhaustivite + if (preg_match_all( + '/(<[?]php\s+)@?header\s*\(\s*.([^:]*):\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims', + $corps, $regs, PREG_SET_ORDER)) + foreach ($regs as $r) { + $corps = str_replace($r[0], '', $corps); + # $j = Content-Type, et pas content-TYPE. + $j = join('-', array_map('ucwords', explode('-', strtolower($r[2])))); + $headers[$j] = $r[3]; + } + return array('texte' => $corps, 'squelette' => $nom, - 'process_ins' => ((strpos($corps,'<'.'?')=== false) ? 'html' : 'php'), + 'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'), 'invalideurs' => $Cache, 'entetes' => $headers); } -- GitLab