Server
Side Includes (SSI) [Service/Helpdesk
Übersicht]

Was
ist SSI [Inhalt]
Richtig spannend wird es im WWW erst, wenn man
dynamisch Dokumente erzeugt, also eine Anfrage nicht immer das gleichbleibende Dokument
hervorzaubert sondern dessen Inhalt sich in Abhängigkeit von Anfrage, Uhrzeit oder
dergleichen ändert. Eine Möglichkeit dazu bieten CGI-Programme, deren Verwendung aber
gewisse Kenntnisse der Programmierung voraussetzen. Eine simplere Methode sind die SSIs.
Sie haben damit die Möglichkeit, vor dem Absenden eines Dokumentes, dynamisch einzelne
Textstellen zu ändern.
Das Konzept der Server Side
Includes [Inhalt]
Hinter dem Schlagwort SSI verbirgt sich das
Konzept, spezielle Direktiven in HTML-Seiten einzubetten, die vom Server vor der Rückgabe
des jeweiligen Dokumentes erkannt, ausgewertet und durch anderen Text ersetzt werden.
Sollen z.B. auf jeder Seite angezeigt werden, wann diese zuletzt aktualisiert
wurde, dann musste bisher der Webmaster bei jeder Änderung auch dieses Datum auf allen
Seiten anpassen. Dies ist eine mühsame und fehlerträchtige Aufgabe. Viel einfacher gehts
mit SSI. Sie fügen ein spezielles Tag in das HTML-Dokument ein und der Server ersetzt
dies beim abspielen automatisch mit dem gewünschten Datum!
Sie können mit SSI auch ganze Dokumente so einfügen. NetZone verwendet diese
Möglichkeit z.B. für praktisch alle Seiten! Anstelle den Menübalken auf jeder Page zu
erstellen, wird dieser einmal designed und der entsprechende HTML-Code in einer separaten
Datei gesichert. In allen Dokumenten wird dann nur noch ein Verweis darauf eingefügt, der
Server erledigt den Rest. Ändert sich mal der Menübalken, genügt es diese eine Datei
anzupassen und alle Seiten sind sofort aktuell.
Damit der Server weiss, ob ein Dokument
SSI-Kommados enthält, muss die Datei die Endung .shtml
tragen. Nur dann wird das Dokument entsprechend verarbeitet!
Natürlich hat das ganze auch einen kleinen Haken. Da solche .shtml-Seiten vor der
Rückgabe durch den Server erst noch geparsed werden müssen, dauert der Seitendownload
gegenüber normalen .html-Seiten etwas länger.
SSI-Kommandos werden in HTML Dokumenten in Form
von Kommentaren eingebettet.
<!--SSI-Kommando-->
Achtung: Zwischen <!-- und SSI-Kommando darf
kein weiteres Zeichen stehen, auch kein Leerzeichen!
Beispiel:
<!--#echo var="DATE_LOCAL" -->
Dies fügt die aktuelle Uhrzeit und das Datum in
Ihr Dokument ein.
Die
SSI-Referenz [Inhalt]
#config errmsg=fehlermeldung
#config sizefmt=grössenformat
#config timefmt=zeitformat
Über das #config-Kommando werden die Formate
für die Ausgabe der Dateigrösse (s. #fsize) eines Datums oder der Uhrzeit (s. flastmod
und echo) definiert. Darüber hinaus kann ein Text definiert werden, der immer dann in die
HTML-Seite eingefügt wird, wenn ein Fehler bei der Bearbeitung eines SSI-Kommandos
aufgetereten ist
errmsg-Attribut: Fehlermeldung
sizefmt-Attribut: "abbrev"=Dateigrösse wird auf kb gerundet,
"bytes" Ausgabe in Einheit bytes. timefmt-Attribut: siehe folgende
Tabelle
Platzhalter |
Bedeutung |
Beispiel |
%a |
Abkürzung des Wochentags |
Mon |
%A |
Wochentag ausgeschrieben |
Monday |
%b |
Abkürzung des Monats |
Aug |
%B |
Monatsname |
August |
%d |
Monatstag (ohne führende 0) |
1 |
%D |
Datum |
08/17/1998 (mm/tt/yy) |
%e |
Monatstag (mit führender 0) |
01 |
%H |
Stunde (24h-Format) |
17 |
%l |
Stunde (12h-Format) |
5 |
%j |
Tag des Jahres |
262 |
%m |
Monat (numerisch) |
8 |
%M |
Minuten |
05 |
%p |
Vor/Nachmittag |
pm oder am |
%r |
vordefiniertes Zeitformat (%l:%M:%S
%p) |
05:30:12 am |
%S |
Sekunden |
09 |
%T |
24h Uhrzeit (%H:%M:%S) |
17:30:12 |
%U |
Kalenderwoche |
04 |
%W |
Kalenderwoche (wie %U) |
04 |
%w |
Wochentag (Sonntag=1, Montag=2, ...) |
02 (=Montag) |
%y |
Jahr (ohne Jahrhundert) |
98 |
%Y |
Jahr |
1998 |
%Z |
Zeitzone |
GMT +0060 |
Bsp: <!--#config
sizefmt="abbrev" timefmt="%d.%m.%Y" errmsg="FEHLER!!!"
-->
#include file=datei
#include virtual=/verz/datei
Das #include-Kommando wird verwendet um den Inhalt einer
Datei in den Quelltext der HTML-Seite einzubetten.
file: Bei Verwendung des file-Attributs ist zu beachten, dass keine Pfadangaben
erlaubt sind, d.h. dass die Datei im selben Verzeichnis stehen muss, wie das HTML-Dokument
selber.
virtual: Bei Verwendung des virtual-Attributs ist ein Pfad relativ zum virtuellen
Server möglich.
Bsp: <!--#include file="menue.txt" -->
#echo var=cgi_variable
Das #echo-Kommando wird zur Ausgabe von Umgebungsvariablen
verwendet. Es stehen folgende Variabeln zur Verfügung:
Umgebungsvariable (SSI) |
Beschreibung |
Beispiel |
DOCUMENT_NAME |
Name des aktuellen
HTML-Dokumentes |
test.shtml |
DOCUMENT_URI |
virtueller Pfad zum aktuellen
Dokument |
/unterverz/test.shtml |
QUERY_STRING_UNESCAPED |
der Querystring bei dem
Sonderzeichen (zB %20) bereits übersetzt wurden |
?Par1=Peter
Mueller&Par2=NetZone |
DATE_LOCAL |
aktuelles Datum / Uhrzeit
(Ausgabeformat s. #config) |
11:08:25 17 Aug 1998 |
DATE_GMT |
aktuelle Weltzeit
(Greenwich Mean Time) (Ausgabeformat s. #config) |
10:08:25 17 Aug 1998 |
LAST_MODIFIED |
Datum / Uhrzeit der letzten
Änderung der HTML-Datei |
10:02:34 17 Aug 1998 |
Umgebungsvariable (CGI) |
Beschreibung |
Beispiel |
AUTH_TYPE |
verwendetes
Authentifizierungsschema |
BASIC |
CONTENT_TYPE |
Der Datentyp der vom Client
gesendetetn Daten (bei PUT/POST) |
text/html |
CONTENT_LENGTH |
Anzahl der vom Client
gesendeten Bytes (bei PUT/POST) |
268 |
DOCUMENT_ROOT |
Wurzelverzeichnis des Servers |
/htdocs/ |
GATEWAY_INTERFACE |
Versionsnr des CGI-Interface |
CGI/1.1 |
HTTP_ACCEPT |
vom Client unterstützte
MIME-Typen |
text/*, image/gif, image/jpeg |
HTTP_REFERER |
Adresse der zuvor vom Client
besuchten HTML-Seite |
www.microsoft.ch/netzone.html |
HTTP_USER_AGENT |
Name des Client-Browsers |
Mozilla(2.066) |
PATH_INFO |
Pfad der URI |
/verz/subverz/info |
PATH_TRANSLATED |
absoluter Pfad des
Verzeichnisses auf das die URI zeigt |
/home/cxxc/htdocs/verz |
QUERY_STRING |
Parameter aus der URI |
?Par1=1&Par2=2 |
REMOTE_HOST |
Domainname des Client |
zhbxx.bluewin.ch |
REMOTE_ADDR |
IP-Adresse des Client |
123.234.345.456 |
REMOTE_IDENT |
"Identität" des
Client |
globi |
REQUEST_METHOD |
Abgragemethode |
GET |
SCRIPT_NAME |
Name des CGI-Scripts |
perl.pl |
SERVER_NAME |
HOST-Name des Servers |
www.netzone.ch |
SERVER_PORT |
Port an demder Server die
HTTP-Anfragen erwartet |
80 |
SERVER_PROTOCOL |
Versionsnr des vom Server
unterstützten HTTP-Protokolls |
HTTP/1.1 |
SERVER_SOFTWARE |
Name der Serversoftware |
Apache |
|
|
|
Bsp: <!--#echo
var="LAST_MODIFIED" -->
Siehe auch SSI-Kommando #printenv.
#exec cmd=datei
#exec cgi=url
Das #exec-Kommando führt das angegeben Programm aus und
fügt dessen Ausgabe in das HTML-Dokument ein. Sofern Sie dem aufzurufenden Programm
einzelne Parameter übergeben wollen, so sollten Sie die Funktion include verwenden, da
exec mit Parametern nicht fehlerfrei arbeitet.
#include file=datei
#include virtual=/verz/datei
Das #include-Kommando wird verwendet um den Inhalt einer
Datei in den Quelltext der HTML-Seite einzubetten.
file: Bei Verwendung des file-Attributs ist zu beachten, dass keine Pfadangaben
erlaubt sind, d.h. dass die Datei im selben Verzeichnis stehen muss, wie das HTML-Dokument
selber.
virtual: Bei Verwendung des virtual-Attributs ist ein Pfad relativ zum virtuellen
Server möglich.
Bsp: <!--#include file="menue.txt" -->
#flastmod file=datei
#flastmod virtual=/verz/datei
Das #flastmod-Kommando gibt das Datum der letzten Änderung
einer bestimmten Datei aus. Siehe auch #include.
Bsp: <!--#flastmod file="index.html" -->
#fsize file=datei
#fsize virtual=/verz/datei
Das #fsize-Kommando gibt die Grösse der angegebenen Datei
aus. Siehe auch #include.
Bsp: <!--#flastmo file="index.html" -->
#if expr="test_condition"
#elif expr="test_condition"
#else
#endif
Mit diesen Kommandos funktionieren analog wie in einer
üblichen Programmiersprache.
wobei mögliche test_condition:
string |
true, wenn string nicht leer |
string1 =
string2 |
vergleicht 2 Strings |
string1 !=
string2 |
vergleicht 2 Strings |
string1 <
string2 |
vergleicht 2 Strings |
string1 <=
string2 |
vergleicht 2 Strings |
string1 >
string2 |
vergleicht 2 Strings |
string1 >=
string2 |
vergleicht 2 Strings |
( test_condition ) |
true, wenn test_condition true |
!
test_condition |
true, wenn test_condition false |
testcondition && testcondition |
true, wenn beide test_condition true
(AND) |
testcondition || testcondition |
true, wenn eine der test_condition true
(OR) |
Bemerkungen:
Falls für string2 die Form /string2/ hat, wird dieser als regulärer Ausdruck analog dem
Unix-Commando egrep interpretiert.
Bsp:
<!--#if expr="\"$SERVERNAME\" = \"www.netzone.ch\""
-->
Server heisst NetZone
<!--#else -->
Server heisst nicht NetZone
<!--#endif -->
#printenv
Druckt eine Liste aller Umgebungsvariabeln.
#set var="X"
value="Y"
Weist der Variablen mit dem Namen X den Wert Y zu.
Bsp:
<!--#set var="category" value="help" -->
[zurück
zum Inhaltsverzeichnis] |