eBook-Project by AboutWebDesign.de [LOGO]

4.9 SSI

URL: http://www.webdesign-referenz.de/html_ssi.html

Inhaltsverzeichnis "SSI"
4.9.1 Einführung
4.9.2 Voraussetzungen
4.9.2.1 Auf dem Server
4.9.2.2 Auf dem eigenen Computer
4.9.3 SSI-Syntax
4.9.4 Einfügen einer Datei
4.9.5 Dateigrößen
4.9.6 CGI-Script ausführen
4.9.7 Letzte Änderung
4.9.8 Variablen
4.9.8.1 Setzen
4.9.8.2 Ausgeben
4.9.8.2.1 Vordefinierte Variablen
4.9.8.2.2 Besonderheit von QUERY_STRING
4.9.8.2.3 DATE_GMT verändern
4.9.9 Abfragen
4.9.9.1 Struktur von Abfragen
4.9.9.2 Bedingungen
4.9.10 Debugging-Tipp


4.9.1 Einführung

Vor einigen Jahren war die Aktualisierung eines Navigationsmenüs richtige Arbeit, wenn man nicht gerade einen Server mit CGI-Unterstützung zur Verfügung hatte oder Frames verwendete. Das ist vorbei, denn heute sind Server Side Includes auch bei den Massen-Hostern verfügbar. Dabei handelt es sich um relativ einfache Befehle, die der Server ausführt, bevor die Seite an den Surfer geliefert wird. Nach oben

4.9.2 Voraussetzungen

4.9.2.1 Auf dem Server

Server Side Includes (SSI) werden erst auf einem entsprechend ausgestatteten Web-Server aktiv. Wenn Sie die Dateien also einfach von der Festplatte in Ihren Browser laden, wird nichts zu sehen sein. Sie brauchen folglich einen Server, der SSI unterstützt.

Wenn Sie sowieso Webspace gemietet haben, sollte das kein Problem sein: fast alle großen deutschen Hoster unterstützen SSI. Wenn Sie dagegen keinen Webspace haben, können Sie sich auch einen Webserver lokal installieren, so z.B. den Apache. Herunterladen kann man sich den populären Server von apache.org.

Die meisten Server entscheiden anhand der Dateiendung, ob sie ihren SSI-Parser aktivieren sollen. Meist ist das .shtml, im Zweifelsfall wird Ihnen der Administrator des Servers sicher weiterhelfen können.

4.9.2.2 Auf dem eigenen Computer

Nahezu wie immer: ein Text-Editor reicht vollkommen aus. Nach oben

4.9.3 SSI-Syntax

SSI-Anweisungen beginnen immer mit <!--# und enden mit -->. Vor --> muss entweder ein Anführungszeichen oder ein Leerzeichen stehen.

Hinter der Raute steht der eigentliche Befehl. Nach einem Leerzeichen können dann weitere Parameter folgen, die die Wirkung des Befehls beeinflussen.

Beispiel (der Befehl existiert nicht): <!--#Telefonanruf nummer="245218"--> Nach oben

4.9.4 Einfügen einer Datei

Eine der beliebtesten Anweisungen: mit dem include-Befehl fügt der Server dort, wo der Befehl steht, den Inhalt einer anderen Datei ein. Praktisch wird dies bei z.B. Navigationsmenüs. Fügen Sie in jede Ihrer Dateien einen Befehl ein, der eine Datei, in der Ihr Navigationsmenü als HTML-Code gespeichert ist, einschließt. Hinterher brauchen Sie nur diese eine eingeschlossene Datei zu ändern, um das Aussehen des Navigationsmenüs durchgehend anzupassen.

Beispiel:

<!--#include virtual="/verz1/index.html"-->

     


Dieser Befehl fügt die Datei http://www.IhrServer.de/verz1/index.html ein. Wichtig ist hier das Schlüsselwort virtual: dadurch wird es nämlich möglich, Dateinamen sowohl relativ als auch absolut anzugeben.

Ein Beispiel: Ihr Server heißt http://www.xyz.de, das obige Beispiel liegt in der Datei http://www.xyz.de/verzeichnis2/index.shtml.

Wie sich ein absoluter Befehl auswirkt, steht direkt unter dem Beispiel. Was ist nun aber, wenn wir den Befehl relativ anwenden, also ohne den Slash am Anfang?

Der Befehl

<!--#include virtual="verz1/index.html"-->

     


fügt die Datei http://www.xyz.de/verzeichnis2/verz1/index.html ein. Bei relativen Befehlen wird also von der Position der Datei ausgegangen, in der der Befehl steht, bei absoluten wird grundsätzlich vom "root", also vom Stammverzeichnis Ihres Webservers, ausgegangen. Nach oben

4.9.5 Dateigrößen

Dieser Befehl zeigt die Dateigröße der Datei /verz1/index.html an:

<!--#fsize file="/verz1/index.html"-->

     
Nach oben

4.9.6 CGI-Script ausführen

Der folgende Befehl führt das CGI-Script acup.pl aus. Das, was das Script an die Standardausgabe sendet, landet hinterher da, wo der exec-Befehl stand.

<!--#exec cgi="/cgi-bin/acup.pl"-->

     


Bitte beachten Sie, dass sich CGI-Scripts fast immer auch mit dem include-Befehl ausführen lassen.<!--#include virtual="/cgi-bin/acup.pl"--> würde also auch funktionieren und ist meistens sogar unproblematischer. Nach oben

4.9.7 Letzte Änderung

Mit dieser Anweisung wird die letzte Dateiänderung angezeigt:

<!--#flastmod file="/verz1/index.shtml"-->

     
Nach oben

4.9.8 Variablen

Variablen sind Container für Daten. Jeder Container trägt einen Namen. Es ist möglich, im Laufe eines Container-Lebens unterschiedliche Inhalte in den Container einzusetzen.

4.9.8.1 Setzen

Neben den von Anfang an vordefinierten Variablen kann man auch selbst Variablen setzen:

<!--#set var="Variablenname" value="Wert" -->

     


4.9.8.2 Ausgeben

Das nächste Beispiel zeigt das Ausgeben einer Variable. "Ausgeben" heißt, dass die entsprechende SSI-Anweisung durch die in der Variable enthaltene Information ersetzt wird. Im Beispiel heißt die auszugebende Variable DOCUMENT_NAME:


    <!--#echo var="DOCUMENT_NAME"-->
    

     


4.9.8.2.1 Vordefinierte Variablen

Folgende Variablen sind vordefiniert, müssen also nicht gesetzt werden und enthalten grundsätzlich sinnvolle Werte:


4.9.8.2.2 Besonderheit von QUERY_STRING

Letztere Variable ist sehr praktisch: wenn z.B. http://www.IhrServer.de/test.shtml?teststring aufgerufen wird, dann enthält QUERY_STRING den Wert teststring. Zusammen mit den logischen Ausdrücken (siehe unten) lassen sich damit sehr praktische Dinge anfangen.

Um das zu verdeutlichen, an dieser Stelle ein kleines Beispiel für eine dynamische Inhaltserzeugung unter Verwendung von QUERY_STRING. Es geht dabei darum, dass der Benutzer auf einen Link klickt und mehr Informationen angezeigt bekommt. Wenn Sie das Beispiel jetzt noch nicht verstehen, macht das nichts - lesen Sie zunächst weiter bis zu den Abfragen und kehren Sie dann hierher zurück.

<!--#if expr="${QUERY_STRING} != 'moreinfo'" -->
    Sehr schöne Informationen über Thema ABC
    <a href="<!--#echo var="DOCUMENT_URI"-->?moreinfo">
    Mehr Informationen</a>
    <!--#endif -->
    
    <!--#if expr="${QUERY_STRING} = 'moreinfo'" -->
    Mehr Informationen über Thema ABC
    <!--#endif -->

     


4.9.8.2.3 DATE_GMT verändern

Gut möglich, dass Sie die Art und Weise, wie das Datum z.B. in der Variablen DATE_GMT gespeichert wird, gerne ändern möchten. Verwenden Sie dazu diesen Befehl:

<!--#config timefmt="%d.%m.%Y"-->

     


Das, was über den Parameter timefmt übergeben wird, bestimmt letztendlich, was in DATE_GMT steht. Innerhalb von timefmt stehende, mit dem Prozent-Zeichen beginnende Formatierungs-Codes werden später durch konkrete Werte ersetzt.

Diese %-Codes gibt es:

Nach oben

4.9.9 Abfragen

Ein Beispiel für Abfragen haben Sie bereits unter dem Abschnitt "Ausgabe einer Variable" gesehen. Damit wird dynamische Inhaltserzeugung ohne Verwendung von speziellen serverseitigen Programmen möglich.

4.9.9.1 Struktur von Abfragen

Für Abfragen werden die Schlüsselwörter if, elif, else und endif unterstützt:
if expr = "bedingung"
elif expr = "bedingung"
else
endif

Zur Bedeutung von bedingung weiter unten mehr. Zunächst ist es wichtig, zu verstehen, dass sich damit logische Strukturen aufbauen lassen. if leitet grundsätzlich eine Abfrage ein. Folgen muss eine Bedingung. Normalsprachlich würde man "Wenn die Bedingung zutrifft, dann..."" sagen.

elif verlangt ebenfalls eine folgende Bedingung, man würde aber normalsprachlich "Wenn vorheriges nicht zutrifft, aber eine andere Bedingung, dann..." sagen. elif kann also nur nach einem if oder einem anderen elif stehen.

else dagegen steht für "Wenn alles andere nicht zutrifft, dann...". else kann nur nach einem if oder elif stehen.

endif markiert das Ende der Abfrage.

Zunächst also ein Beispiel für eine mögliche Abfrage:


        <!--#if expr = "'abc' = 'bcd'" -->
            Wird nur angezeigt, wenn "abc" gleich "bcd" ist
        <!--#elif expr = "'abc2' = 'abc1'" -->
            Wird nur angezeigt, wenn "abc2" gleich "abc1" ist
        <!--#else -->
            Nur, wenn gar nichts zutrifft.
        <!--endif -->
        

     


Verschachtelungen sind möglich:


        <!--#if expr = "'abc' = 'abc'" -->
        Wird nur angezeigt, wenn "abc" gleich "abc" ist
            <!--#if expr = "'abc2' = 'abc2'" -->
            Und das hier nur dann, wenn "abc" gleich "abc" ist und
            "abc2" zusätzlich noch gleich "abc2"
            <!--endif -->
        <!--endif -->
        

     


4.9.9.2 Bedingungen

Kommen wir nun zur Bedingung. Wie in den Beispielen zu sehen ist, wird die Bedingung von Anführungszeichen umschlossen. Ein Leerzeichen nach dem schließenden Anführungszeichen ist empfehlenswert.

Bedingungen werden immer nach 0 (nicht zutreffend) oder 1 (zutreffend) hin ausgewertet. if und elif verarbeiten nur dann den nachfolgenden Code, wenn das Ergebnis eine 1 ist.

Die Bedingung setzt sich typischerweise aus drei Teilen zusammen: einem Operator in der Mitte und zwei Operanden, rechts und links daneben:

'zeichenkette1' = 'zeichenkette2'

     


Folgende Operatoren gibt es: = (gleich), != (ungleich), < (kleiner), > (größer), <= (kleiner oder gleich), >= (größer oder gleich).

Hat man mehrere Teilbedingungen, die überprüft werden sollen, dann verwendet man && (und) und || (oder). Üblicherweise wird dann geklammert:

('zeichenkette1' = 'zeichenkette2') && ('abc' != 'abc')
(In natürlicher Sprache: "Wenn 'Zeichenkette1' gleich 'Zeichenkette2' und 'abc' ungleich 'abc'")

Will man eine Bedingung umkehren, verwendet man !:

!('zeichenkette1' = 'zeichenkette2')
(In natürlicher Sprache: "Wenn nicht 'Zeichenkette1' gleich 'Zeichenkette2'")

Es ist auch möglich, eine Variable in eine Abfrage mit einzubeziehen. Ihr Name steht dann innerhalb von ${}

<!--#if expr="${QUERY_STRING} = 'moreinfo'" -->

     

("Wenn der Inhalt der Variable QUERY_STRING gleich 'moreinfo' ist")

Für Fortgeschrittene gibt es dann noch die Möglichkeit der regulären Ausdrücke (eine Erklärung würde weit über den Umfang dieses Artikels hinausgehen). So testen Sie z.B., ob die Variable die Zeichenkette "test" enthält:


<!--#if expr="${DOCUMENT_URI} = /test/" -->
DOCUMENT_URI enthält "test"
<!--#endif -->
Nach oben

4.9.10 Debugging-Tipp

Wer Probleme mit komplexen SSI hat, muss oft wissen, welche Variablen welchen Wert haben. Eine bequeme Ausgabe aller Variablen erledigt folgendes Code-Stück:

<!--#printenv-->

     
Nach oben