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]