[SSI - Server Side Includes - Eine Einführung]

SSI (Server Side Includes) sind Direktiven, die in HTML- Dokumente eingebettet werden und vom Webserver abgearbeitet werden, während der Server die Datei an den Client liefert. SSI ermöglichen Ihnen, dynamisch generierten Inhalt in einer HTML- Seite zu erzeugen, ohne die Seite durch ein CGI- Programm oder eine andere dynamische Technologie abzuarbeiten.

Die Entscheidung, ob Sie SSI verwenden oder die Seite von einem anderem Programm erzeugen lassen, ist gewöhnlich eine Frage des statischen Umfangs der Seite und wieviel Inhalt bei jeder neuen Auslieferung der Seite neu erzeugt werden muss. SSI ist gut geeignet, um kleine Informationshäppchen wie die aktuelle Zeit, die File-Größe, das Datum der letzten Änderung oder andere Dokumente in ein Dokument einzubinden.
 

Konfiguration des Webservers

Um SSI auf Ihrem Server zu erlauben, müssen folgende Direktiven in der httpd.conf oder einer .htaccess Datei eingetragen werden. Anwender, die keinen direkten Zugang zu Ihrem Webserver haben, wenden sich bitte an ihren ISP (Provider). Die folgende Beschreibung beschränkt sich auf den Apache Webserver, der im WWW sehr verbreitet ist. (Erläuterungen zur .htaccess finden Sie auch hier)
 
Options +Includes

Dies weist den Webserver an, dass Sie das Parsen von Dateien für SSI zulassen.

Nicht jede Datei wird für SSI Direktiven geparsed. Dem Webserver muss mitgeteilt werden, welche Dateien geparsed werden sollen. Hier gibt es beim Apache zwei Möglichkeiten. Sie weisen ihn an, jede Datei mit einer bestimmten Dateiendung (üblicherweise .shtml) zu parsen:
 
AddType text/html .shtml
AddHandler server-parsed .shtml

Ein kleiner Nachteil hierbei ist, dass Sie bestehende Dateien, in welche Sie SSI einbauen wollen, umbenennen und sämtliche Links zu dieser Datei ändern müssen.

Die andere Methode ist die Verwendung der XBitHack Direktive:
 
XBitHack on

XBitHack weist Apache an, alle Dateien, bei denen das execute bit gesetzt ist, zu parsen. Bei dieser Methode müssen Sie bestehende Seiten lediglich ausführbar machen (mit chmod)
 
chmod +x pagename.html

Was Sie nicht machen sollten: Manche Schlaumeier weisen Apache einfach an, sämtliche .html Dateien zu parsen, damit sie sie nicht ändern müssen. Das hat natürlich zur Folge, dass der Webserver jede HTML- Datei nach SSI durchliest, egal ob diese darin enthalten sind oder nicht. Dies kann Ihren Webserver etwas verlangsamen, ist also keine wirklich gute Idee.
 

Verwendung von SSI

SSI Direktiven haben die folgende Syntax:
 
<!--#elementattribute=value
attribute=value ... -->

Sie sind formatiert wie HTML- Kommentare, so dass der Browser sie ignoriert, falls SSI nicht richtig konfiguriert ist. Wenn SSI richtig konfiguriert ist, wird die Direktive durch ihr Resultat ersetzt und vom Browser angezeigt.

Das Element kann eines von mehreren sein, die wir in der Folge näher besprechen.

Echo Element
 
heutiges Datum: <!--#echo var="DATE_LOCAL" -->

Beispiel:

heutiges Datum: Wednesday, 23-May-2012 12:48:42 CEST

Das echo Element gibt den Wert einer Variable zurück. Es gibt eine Reihe Standardvariablen, ausserdem kann echo alle Umgebungsvariablen, die für CGI- Programme zur Verfügung stehen, beinhalten. Sie können auch eigene Variablen durch das set Element definieren.

Standardvariablen
 
Variable Beschreibung
Date_Local Momentanes Datum und Uhrzeit des Servers(Durch den Aufstellungsort des Servers bestimmt)
Date_GMT Momentanes Datum und Uhrzeit in GMT (Greenwich Mean Time)
Document_Name Dateinamen des Hauptdokumentes
Document_URI Pfad und Dateinamen des Hauptdokumentes
Last_Modified Datum und Uhrzeit wann das Hauptdokument das letzte Mal geändert wurde

Wenn Ihnen das Format, in welchem das Datum ausgedruckt wird, nicht zusagt, können Sie das config Element dazu verwenden, es mit einem timefmt Attribut zu modifizieren.
 
<!--#config timefmt="%A %B %d, %Y" -->
Heute ist <!--#echo var="DATE_LOCAL" -->

Beispiel:

Heute ist Wednesday May 23, 2012

Hierbei sind:
 
%A Ganzer Wochentag-Name
%B Ganzer Monatsnamen 
%d Day of the month
%Y Jahr
%I Stunde
%M Minute
%p a.m. or p.m.

Datum der letzten Änderung
 
Das Dokument wurde zuletzt geändert am <!--#flastmod file="index.html" -->

Beispiel:

Das Dokument wurde zuletzt geändert am Sunday January 04, 2004

Dieses Element kann ebenfalls mit dem timefmt Attribut konfiguriert werden.

Das Ergebnis einer CGI- Anwendung einbinden
 
<!--#include virtual="/cgi-bin/counter.pl" -->

Dies ist eine häufige Verwendung von SSI - die Ausgabe des Resultats eines CGI- Programms, wie beispielsweise eines HitCounters

Weitere Beispiele

Nachfolgend finden Sie einige spezielle Beispiele darüber, was sie mit SSI noch machen können.

Eben haben wir gesehen, wie man dem User mitteilen kann, wann das Dokument zuletzt geändert wurde. Allerdings lässt die beschriebene Methode etwas offen.
 
<!--#config timefmt="%A %B %d, %Y" -->
This file last modified <!--#flastmod file="ssi.shtml" -->

Hierbei müssen Sie jeweils den aktuellen Namen des Dokuments angeben, auf welches Sie verweisen. Wenn Sie aber nach einem allgemeingültigen Befehl suchen, den Sie ohne Änderung in jede Seite einsetzen können, bietet sich die Verwendung der LAST_MODIFIED Variable an:
 
<!--#config timefmt="%D" -->
This file last modified <!--#echo var="LAST_MODIFIED" -->

Beispiel:

This file last modified 01/04/04

Einbindung einer Standard- Fusszeile

Wenn Sie eine Webseite betreuen, die mehr als nur eine Handvoll Dokumente umfasst, kann es zu einer Qual werden, Änderungen, die ein einheitliches Aussehen Ihrer Site betreffen, in jedem einzelnen Dokument vornehmen zu müssen.

Die Verwendung eines Include Files für den Kopf oder Fuss der Dokumente kann Ihnen viel Arbeit ersparen. Sie müssen diese Datei nur einmal erstellen und können Sie beliebig oft einsetzen. Das Include Element kann mittels des file oder virtual Attributs verwendet werden. Das file Attribut ist eine Pfadangabe, relativ zum aktuellen Verzeichnis. Das bedeutet, dass es keine absolute Pfadangabe (beginnend mit /) noch ../ als Teil des Pfads enthalten darf. Das virtual Attribut ist sinnvoller und muss einen URL relativ zum bezugnehmenden Dokument beinhalten. Es kann mit / beginnen.
 
<!--#include virtual="/footer.html" -->

Sinnvoll ist die Kombination der zuletzt angesprochenen Befehle. Setzen Sie die LAST_MODIFIED Direktive in ein Footer- File, welches Sie danach in alle HTML- Seiten einfügen.

Was ist noch machbar?

Neben Zeitformaten können wir zwei andere Dinge konfigurieren.

Gewöhnlich erhalten wir folgende Fehlermeldung, wenn bei der Ausführung etwas schief läuft:
 
[an error occurred while processing this directive]

Wenn Sie diese Fehlermeldung in etwas anderes ändern möchten, verwenden Sie hierfür das errmsg Attribut mit dem config Element:
 
<!--#config errmsg="[Es scheint, Du hast keine Ahnung von SSI]" -->

Das fsize Kommando kann gebraucht werden um die Grösse einer Datei anzugeben. Beispielsweise kann ein kleines Logo anstelle der aktuellen Datei übermittelt werden und dann die aktuelle Grösse der Hauptdatei mit fsize daneben geschrieben werden. Sie können auch das Format, in welchem Dateigrössen angezeigt werden, durch das sizefmt Attribut bestimmen. Sie können bytes oder abbrev für eine Angabe in Kb oder Mb angeben.
 
<!--#config sizefmt="bytes"--> 
<!--#fsize file="image.gif" -->

Executing Commands

Sie können SSI dazu verwenden Shell- Kommandos auszuführen (/bin/sh) (oder DOS- Shell auf WIN32) oder kleine CGI- Programme. Das folgende Beispiel zeigt ein Verzeichnislisting.
 
<pre>
<!--#exec cmd="ls" -->
</pre>

oder, bei Windows

<pre>
<!--#exec cmd="dir" -->
</pre>

Sie werden bei Windows einen etwas eigenartigen Output feststellen, weil der Befehl u.a. den String <dir> zurückgibt, was den Browser verwirrt.

Beachten Sie, dass dieses Feature sehr gefährlich werden kann, da Sie damit die Ausführug jeden Codes zulassen. Wenn Sie auf Ihrer Webseite Bereiche haben, wo Besucher Inhalte einfügen können (Gästebuch!!), stellen Sie sicher, dass dieses Feature ausgeschaltet ist.
Sie können SSI zulassen und gleichzeitig das exec- Kommando ausschalten, indem Sie das IncludesNOEXEC Argument in die Options Direktive einfügen (httpd.conf, bzw. .htaccess).

Fortgeschrittene SSI Techniken (ab Apache Version 1.2)

Zusätzlich zu den bereits angesprochenen Möglichkeiten können Sie mit SSI auch eigene Variablen anlegen und diese in Vergleichen und Bedingungen verwenden.

Variablen setzen

Mit der set Direktive setzen Sie Variablen und Werte für die spätere Verwendung.
 
<!--#set var="name" value="Rich" -->

Zusätzlich zum Setzen von Variablen können Sie jede andere Variable - Umgebungsvariablen oder einige der bereits weiter oben behandelten Variablen - dazu verwenden, Werte an Ihre Variable zu übergeben.
Hierzu setzen Sie in value ein $ (Dollarzeichen) vor den Namen der wertübergebenden Variablen, damit SSI weiss, dass ein Wert übergeben wird und  kein Textstring.
 
<!--#set var="modified" value="$LAST_MODIFIED" -->

Möchten Sie hingegen ein Dollarzeichen als Wert übergeben, müssen Sie es mit einem Backslash maskieren.
 
<!--#set var="cost" value="\$100" -->

Bedingte Ausdrücke

Mit SSI können Sie auch Bedingungen ausdrücken, wir möchten an dieser Stelle abgesehen von einem kleinen Beispiel nicht näher darauf eingehen. Für weitere Informationen schlagen Sie bitte in der Apache Dokumentation nach.
 
<!--#if expr="test_condition" -->
...
<!--#elif expr="test_condition" -->
...
<!--#else -->
...
<!--#endif -->

test_condition kann jede Art logischen Vergleichs sein.
 
Das Beispiel fragt die CGI- Umgebungsvariable HTTP_USER_AGENT ab, ob darin der Teilstring MSIE (was den Browser als Internet Explorer ausweist) vorkommt. Falls ja, wird der IE- proprietäre Befehl marquee ausgeführt, ansonsten wird ein Alternativtext ausgedruckt.

<!--#if expr="\"$HTTP_USER_AGENT\" = /MSIE/"-->
<marquee>hier läuft was</marquee>
<!--#else -->
... oder auch nicht
<!--#endif -->

... oder auch nicht

Copyright © 1998- Nightfire Java Archiv