Was ist SSI ?
Richtig spannend wird es im WWW erst, wenn man dynamische 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.
Nachtrag: SSI ist eine heutzutage nur noch selten verwendete Möglichkeit dynamische Seiten zu generieren. Programmiersprachen wie PHP (http://www.php.net) bieten weitaus mehr Möglichkeiten und sind relativ einfach zu erlernen.
Das Konzept der Server Side Includes
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 speziellen 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 des Erstellen von Menübalken auf jeder Page, 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-Kommandos 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
#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 aufgetreten 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 |
Beispiel: <!–#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.
Beispiel: <!–#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 | nicht unterstützt, da keine DNS-Auflösung erfolgt | |
| 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 |
Beispiel: <!–#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.
Beispiel: <!–#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.
Beispiel: <!–#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.
Beispiel: <!–#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.
Beispiel:
<!--#if expr="\"$SERVERNAME\" = \"www.netzone.ch\"" --> Server heisst NetZone <!--#else --> Server heisst nicht NetZone <!--#endif -->
#printenv
Druckt eine Liste aller Umgebungsvariablen.
#set var="X" value="Y"
Weist der Variablen mit dem Namen X den Wert Y zu.
Beispiel: <!–#set var=”category” value=”help” –>







