Detta är kommandon som körs på webbservern och formar webbsidan innan den skickas iväg. Har testat vilka kommandon som fungerar på Algonet, förutom de grundläggande, och hittat ett antal, som jag också ger exempel med ...
Tidigare har variabler kunnat användas för att variera
innehållet med taggar innehållande < >.
Den 21 jan upptäckte jag att de numera kan tolkas som
< > och då inte går att använda som
tidigare! Så småningom märkte jag att felet inte var "stabilt"
utan varierade med Algonets interna serveradress (visas med
<!--#echo var="SERVER_ADDR" -->)
10.42.11.10 tolkar som < >
- och här fungerar PHP! (nyinstallerat)
10.42.11.20 tolkar som tidigare - men här fungerar
inte PHP!
Jag har include-filer med text som ska visas
på olika sätt beroende på i vilket sammanhang den visas- med resp utan gul
pil. I stället för att ändra variabeln <!--#set var="pil"
value=""> " får man nu byta includefil; ange t ex
<!--#set var="pil" value="blank.html" -->.
Nedan visas de två kodvarianterna, som tidigare båda visade en gul pil! På
sista raden växlar det beroende på
server!!
| Med variabel | Med fil | |
|---|---|---|
| Tidigare kod | <!--#set var="pil" value="<img src=\"../img/yellarrow.gif\" width=13 height=13 valign=center alt=\"Pil\"> " --> <!--#echo var="pil" --> | <!--#set var="pil" value="gulpil.html" --> <!--#include file="$pil" --> |
| På 10.42.11.10 | <img src="../img/yellarrow.gif" width=13 height=13 valign=center alt="Pil"> | |
| Nu 91.201.60.12 | <img src="../img/yellarrow.gif" width=13 height=13 valign=center alt="Pil"> |
Ladda om några gånger för att använda båda serveradresserna!
På Algonet kan man sedan länge använda SSI (Server Side Includes).Algonet FAQ hänvisar till Eva von Pepels sida om SSI
som ger en bra introduktion av tillgängliga grundläggande kommandon,
nämligen:
#include för att inkludera annan fil
#fsize visar filstorlek
#flastmod visar fildatum
#config errmsg, sizefmt, timefmt ställer in visning
av felmeddelande, filstorlek resp (rikligast, se man
strftime i UNIX!) tid
#echo återger variabel (finns åtskilliga!) och dessutom
#exec (av säkerhetskäl ofta
avstängt)
När jag skulle ändra på en sida ville jag kolla syntax och råkade hitta flera kommandon som jag nu testat med varierande framgång. Det finns i Apache 1.2 ett antal utökade kommandon - Extended Server Side Includes (XSSI). Man får ett "programmeringsspråk" som i sin torftighet ger möjliget att dynamiskt och snabbt forma innehållet i webbsidan utifrån variabler man själv kan påverka. Detta sker innan sidan går från servern och alltså oberoende av webbläsare och långsamma linor. (Dessutom finns ytterligare tillägg som inte är tillgängliga på Algonet.)
|
OBS! Eftersom jag har internetkonto på
Algonet är mycket nedan anpassat till detta, men en del
kan säkert tillämpas på andra unix-servrar med Apache
som webbserver! |
Normalt ska filerna ha ändelsen .shtml. Ska flertalet
webbfiler tolkas, kan man för en kataloggren lägga till i (resp skapa)
filen .htaccess
så tolkas också alla html-filer:
AddHandler server-parsed .html
XSSI ska vara extremt "snällt" mot servern, till skillnad från CGI-skript. Så man ska inta vara rädd att utnyttja de möjligheter som finns med metoden.
Åter början
#set sätter värde på miljövariabel
#printenv visar alla miljövariabler
#if, #elif, #else,
#endif flödeskontroll
Ett nytt SSI-direktiv, #set gör det möjligt att sätta värde på egna miljövariabler.
Det finns dessutom redan en stor mängd miljövariabler som man kan använda till "#echo", "#if" eller i CGI-skript. På en testsida med koden:
<!--#set var="namn"value="värde -->
får man en lista med alla aktuella miljövariabler (även egna, t ex
<font size="-1"><PRE> <!--#printenv --> </PRE></FONT>
UNIQUE_ID=TIqZclvJPAwAAG0dJboAAAAA HTTP_X_CC_ID=ccc04-01 HTTP_HOST=faq.folkmusikhuset.se HTTP_USER_AGENT=CCBot/1.0 (+http://www.commoncrawl.org/bot.html) HTTP_ACCEPT=text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_LANGUAGE=en-us,en;q=0.5 HTTP_ACCEPT_ENCODING=gzip HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_CONNECTION=close HTTP_CACHE_CONTROL=no-cache HTTP_PRAGMA=no-cache PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin SERVER_SIGNATURE=<address>Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at faq.folkmusikhuset.se Port 80</address> SERVER_SOFTWARE=Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 SERVER_NAME=faq.folkmusikhuset.se SERVER_ADDR=91.201.60.12 SERVER_PORT=80 REMOTE_ADDR=38.107.191.114 DOCUMENT_ROOT=/home/folkmusi/public_html/faq SERVER_ADMIN=webmaster@faq.folkmusikhuset.se SCRIPT_FILENAME=/home/folkmusi/public_html/faq/xssi.shtml REMOTE_PORT=56673 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/xssi.shtml SCRIPT_NAME=/xssi.shtml DATE_LOCAL=Friday, 10-Sep-2010 22:47:46 CEST DATE_GMT=Friday, 10-Sep-2010 20:47:46 GMT LAST_MODIFIED=Wednesday, 28-Jul-2004 16:38:17 CEST DOCUMENT_URI=/xssi.shtml USER_NAME=folkmusi DOCUMENT_NAME=xssi.shtml pil=gulpil.html testar=viktigt!!
Åter början
Flödeskontrollen har syntax:
<!--#if expr="testuttryck" --> gör detta <!--#elif expr="testuttryck" --> gör det här i stället <!--#else --> gör det här <!--#endif -->
Detta tillåter att man ger dokumenten olika utseende beroende på vilken variabel och värde man testar emot (Webbläsare, veckonummer, tid på dagen etc, etc).
Trots sin begränsning är detta mycket användbart tillsammans med miljövariablerna, där man också kan söka efter mönster med hjälp av s k "regular expressions" (reguljära uttryck), konkatenera (sätta ihop) strängar och inkludera filer. Det är allt. Alltså inga beräkningsmöjligheter, hopp eller annat som är normalt i programmeringsspråk.
"Testuttryck" utvärderas av Apache. Om det är sant används den kod/text som följer (t ex XSSI-uttryck, text/HTML etc) och infogas i html-dolkumentet. Från servern skickas alltså resultatet, inte själva XSSI-uttrycken, vilket gör koden oberoende av webbläsare och inte belastar lina eller klient. Detaljer, se dokumentationen för Apache!
Lista med testuttryck:
| Expressional | Value |
|---|---|
| string | true if string is not empty |
| string1 = string2 | true if the two strings are identical. If the syntax /string2/ is used, string2 will be compared as a regular expression following the same syntax of the Unix egrep command |
| string1 != string2 | true if the two strings are different. Regular expressions may be used in this case also |
| ( expression ) | true if expression is true |
| ! expression | true if expression is false |
| expression1 && expression2 | true if expression1 and expression2 are both true |
| expression1 || expression2 | true if expression1 or expression2 is true (or both) |
I uttrycken ska variabler identifieras genom att placera ett dollartecken framför ($).
Exempel på flödeskontroll:
<!--#if expr="$HTTP_USER_AGENT = /MSIE/" --> Placera MS Internet Explorer-specifik HTML-kod här! <!--#elsif expr="$HTTP_USER_AGENT = /Mozilla/" --> Placera Netscape-specifik HTML-kod här! <!--#else --> Placera allmän kod för andra webbläsare här!
<!--#endif -->
Dessa få rader med kod kontrollerar om webbläsaren är Netscape eller MS Internet Explorer. Man letar via "regular expressions" efter strängen Mozilla eller MSIE i miljövariabeln för HTTP_USER_AGENT. Man kan så undvika att skicka JavaScript till läsare som inte stöder detta, och ersätta med annan HTML-kod. Sök med ordet XSSI efter exempel med mer utvecklad kod!
Åter början
Texten mellan taggarna illustrerar att man där lägger in html-kod, include-fil el dyl.
Kalendarium
(Det här borde gå mycket bättre med Utökad XSSI
enligt nedan.)
Först är det bäst att skriva ett felmeddelande, för rätt
vad det är har något blivit fel ...
Med tidsformatet %Y%m%d dvs YYYYMMDD
kommer allt i rätt ordning
v Motsvarande upprepas för varje följande dag man har kalenderuppgifter. När man går in på sidan får man alltid aktuell dag först i kalendariet. Eller så väljer man att lägga in uppgifter veckovis med veckonummer (t ex YYYYWW) enligt nedan.
<!--#config errmsg="Fel! - Rapportera till namn@server.se" --> <!--#config timefmt="%Y%m%d" --> <!--#if expr="$DATE_LOCAL <= 20100910" --> Skriv dit det som händer i dag <!--#endif -->
Ny sida varje vecka
Först har jag ställt datumformatet att visa veckonummer
enligt vår standard (finns även andra varianter).
Sedan får datumformatet visa filnamn (typ 201036.html)
<!--#config timefmt="%V" --> AKTUELLT vecka <!--#ECHO VAR="DATE_LOCAL" -->:
Inför varje vecka förbereder man det innehåll som är föränderligt
<!--#config timefmt="%Y%V.html" --> <!--#set var="filnamn" value="$DATE_LOCAL" --> <!--#INCLUDE FILE="$filnamn" --> Resten av HTML-koden
<!--#config timefmt="%Y-%m-%d" --> Sidan uppdaterad <!--#flastmod file="$filnamn" -->
Välj språk
Från webbläsaren skickas bl a miljövariabeln
$HTTP_ACCEPT_LANGUAGE som man kan utvärdera med
"regular expressions":
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = /^sv,*/" --> Svenska <!--#elif expr="$HTTP_ACCEPT_LANGUAGE = /^de,*/" --> Deutsch <!--#elif expr="$HTTP_ACCEPT_LANGUAGE = /^en,*/" --> English <!--#else --> English <!--#endif -->
(här håller jag på med vanliga fel och ska komma med några egna frågor ...)
Kontrollera att HTML-kommentaren är riktigt formulerad. Syns koden eller delar av den i webbläsare eller som källkod, kolla att det finns "<!--#" (utan mellanslag) i början och " -->" (med mellanslag) i slutet.
/ används i "regular expressions" (reguljära uttryck) och " som avgränsare och tolkas som en del av kommandot om de inte föregås av \. Skriv alltså i stället \" resp \", så "skalas" \ bort!
Exempel:
Den övre raden är sann endast om uttrycken är identiska (strängar inom \" jämförs)
<!--#if expr="\"sträng1\" = \"sträng2\"" --> <!--#if expr="sträng1 = /sträng2/" -->
Med %Y blir veckobaserat årtal fel, t ex den del av vecka 200201 som infaller under 2001 (31 dec - %Y%W ger vecka 200101! Lösning (enl man strftime:
%G Week-based year, including the century [0000,9999].Valet %G fungera inte på webbservern!
Åter början
På Algonet har vi inte tillgång till exempelvis Hotwired: Random Directive, parse_form eller utökat #echo. Ej heller någon av: odbc, email, goto, label eller break som finns t ex i SSI+. Sökning på några av orden ger ett stort antal träffar!
Om man använder XSSI så att sidorna uppdateras ofta och det är viktigt att alltid aktuell sida visas kan man på dessa sidor lägga till uppgifter som förhindrar att sidan cachas. Detta eftersom .shtml-sidorna oftast behandlas som vanliga .html-sidor.
Den övre är föråldrad, den andra är standard. Använder man båda är man på säkra sidan.
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Refresh" CONTENT="600;url=http://www.server.se/sida.shtml">
Med favoritsökmotorn finner man en massa länkar om man söker på (extended) server sides includes med lämpligt tillägg: tutorial, examples, reference etc.
Länkar till länksamlingar:
The CGI Resource Index,
Yahoo
Google
sss
Jigsaw SSI+
Exempel
The XSSI
Library innehåller en mängd exempel och hänvisningar (se
rubrikerna till vänster!) Tyvärr finns det flera döda länkar ...
The World's XSSI Cookbook innehåller rikligt med
exempel.
SCAILAB XSSI Tutorial innehåller också exempel.
Åter början
Sidan besökt
gånger sedan 12 sep 2001.
Åter hemsidan
Se också sidor om:
| Error robot | Skapa anpassade felmeddelanden |
(Bättre kolla fellogg) |
| Mailman | Program för e-postlistor |
Använder jag för nyhetsbrev |
| PHP | Tester med PHP på Algonet |
|
| SSH | Secure shell - bättre än Telnet |
|
| WAP | Grunder för att publicera för WAP-telefon |
|
| Allmänt | Tekniska grunder |
Varför sidorna flyttats till Oderland & Co |
|
Titta gärna in hos Folkmusikhuset
i Stockholm |
||
Kontakta Arne Kjellman