Startseite
>
6. Module
>
6.6. SSI - mod_include
>
6.6.2. Struktur der Anweisung
|
Zurück
Vor
|
|
|
|
Die SSI-Direktiven, die in die HTML-Seiten eingefügt werden müssen, haben die folgende
allgemeine Syntax:
<!--#element attribute=value attribute=value
... -->
Sollte das SSI-Modul nicht aktiviert sein, stellt der Browser nur den Kommentar dar.
|
|
Für den Platzhalter "element" sind folgende Werte möglich:
Element
|
Beschreibung
|
config
|
Festlegung des Ausgabeformats
|
echo
|
Ausgabe von Variablen
|
exec
|
Aufruf eines externe Programms (cgi oder Systemaufruf)
|
fsize
|
Ausgabe der Dateigröße
|
flastmod
|
Ausgabe des Datums der letzten Änderung
|
include
|
Einbindung einer Datei
|
printenv
|
Darstellung aller Variablen
|
set
|
Variable einen Wert zuweisen
|
|
|
Das config Element kontrolliert im wesentlichen drei Aspekte:
Beispiele:
<!--#config errmsg="[It appears that you don't
know how to use SSI]" -->
<!--#config timefmt="%A %B %d, %Y" -->
|
|
Das echo-Element gibt den Wert einer Variablen aus. Der Befehl erwartet bis zu zwei
Attribute:
Beispiel:
<!--#echo var="DATE_LOCAL" -->
|
|
Das exec-Element führt ein externe Programm aus und fügt dessen Output in die Seite
ein. Es
erfordert das Module "mod_cgi". Das Kommando kann mit der "Option IncludesNOEXEC"
deaktiviert werden.
Als Argument erwartet das Element das Attribut "cgi" oder "cmd"
mit dem urlencodeden Pfad
des Programms. Im Fall des "cgi" wird der relative Pfad des CGIs angegeben.
Beispiel:
<!--#exec cgi="/cgi-bin/example.cgi" -->
Beim Attribut "cmd" wird eine Subshell (/bin/sh, command.com) aufgerufen
und das Programm
abgearbeitet.
Beispiel:
<!--#exec cmd="ls" -->
<!--#exec cmd="perl /path/to/perlscript arg1
arg2" -->
Die Parameter der HTML-Seite werden per PATH_INFO an das Programm übergeben. Sollten
aber noch weitere Parameter nötig sein, sollte man dem exec-Element das "include virtual"-
Element vorziehen. Auch die interne Verarbeitung ist beim "include" effektiver implementiert.
|
|
Das fsize-Element gibt die Größe des jeweiligen Files wieder. Das Element unterstützt
zwei
Attribute:
-
file: eine Datei
- virtual: dynamische
Datei - Größe des Outputs (Content-Length)
|
|
Dieses Element (flastmod) gibt das Datum der letzten Veränderung. Das Element unterstützt
zwei Attribute:
-
file: eine Datei
- virtual: dynamische
Datei
Beispiel:
<!--#config timefmt="%A %B %d, %Y" -->
This file last modified <!--#flastmod file="ssi.shtml"
-->
|
|
Das include-Element fügt den Text eines anderen Dokuments (statisch oder dynamisch)
an der
Stelle ein. Die Zugriffsbegrenzungen sind dabei aber aktiv. Als Attribute sind möglich:
Im Fall der virtuellen Dokumente wird das Programm behandelt, als wenn es ein Client
aufrufen
würde, d.h. z.B. ScriptAlias-Direktiven oder Redirects werden abgearbeitet. Auf diesem Weg
können mehrere Includes kaskadiert werden.
Beispiel:
<!--#include virtual="/footer.html" -->
<!--#include virtual="/cgi-bin/counter.pl"
-->
<!--#include virtual="/cgi-bin/example.cgi?argument=value"
-->
|
|
Das printenv-Element listet alle bestehenden Variablen auf. Sonderzeichen werden codiert.
Beispiel:
<!--#printenv -->
|
|
Mit dem set-Element weist man einer Variable einen Wert zu. Die beiden Attribute sind
Beispiel:
<!--#set var="category" value="help"
-->
|
|
Neben den Standard-CGI-Variablen stehen dem SSI zusätzlich die folgenden Variablen
zur
Verfügung:
Variable
|
Beschreibung
|
DATE_GMT
|
Datum GMT
|
DATE_LOCAL
|
lokales Datum
|
DOCUMENT_NAME
|
Filename des angefragten Dokuments
|
DOCUMENT_URI
|
die vollständige URL des Dokuments
|
LAST_MODIFIED
|
Last-Modified des Ursprungsdokuments
|
QUERY_STRING_UNESCAPED
|
URL-decodeder Query-String (aber mit \& escapetete &-
Zeichen)
|
Wenn Variablennamen ersetzt werden sollen (außer bei echo), muss dem Namen ein "$"
vorweg geschrieben werden. Typischerweise ist die Variable in Anführungszeichen
eingebunden. Wenn die Variable vom umgebenden String abgegrenzt werden soll, muss der
Variablenname in geschweifte Klammern eingeschlossen werden.
Einige Beispiele:
<!--#if expr="$a = \$test" -->
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}"
-->
|
|
Die grundlegenden Elemente zur Ablaufkontrolle sind
<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->
Die If-Anweisungen entsprechen denen von Programmiersprachen. Die Test-Bedingungen
werden bewertet und wenn sie "wahr" sind, wird der nachfolgende Text bis zum nächsten
"endif" oder "elif" ausgegeben. Folgende Tests werden unterstützt:
Test
|
Beschreibung
|
string
|
wahr, wenn nicht leer
|
string1=string2
|
Gleichheit
|
string1!=string2
|
Ungleichheit
|
string1[!]=/string2/
|
Gleichheit/Ungleichheit, wobei string2 ein perl-Regexp ist.
Trick: wenn auf Gleichheit getestet wird, werden die Variablen $1...$9
belegt. Z.B.:
<!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/"
-->
<!--#set var="session" value="$1"
-->
<!--#endif -->
|
string1 < string2
string1 <= string2
string1 > string2
string1 >= string2
|
Vergleich auf "kleiner", "kleiner gleich", "größer",
"größer gleich". Es sind
aber Vergleiche von Zeichenketten, d.h "100" ist kleiner als "20"
|
( test_condition )
|
wahr, wenn Testbedingung wahr ist
|
! test_condition
|
"nicht" Bedingung
|
test1 && test2
|
Test 1 UND Test 2
|
test1 || test2
|
Test 1 ODER Test2
|
Strings können mit Anführungszeichen gruppiert werden (da sonst Whitespaces Probleme
bereiten).
Ein Beispiel:
<!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"'
-->
URI ist foo
<!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"'
-->
URI ist bar
<!--#else -->
weder noch
<!--#endif -->
|
|
|
|