<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
<modulesynopsis metafile="mod_include.xml.meta">
<name>mod_include</name>
<description>Vom Server vor der Auslieferung interpretierte
Dokumente (Server Side Includes)</description>
<status>Base</status>
<sourcefile>mod_include.c</sourcefile>
<identifier>include_module</identifier>
<compatibility>Seit der Apache-Version 2.0 als Ausgabefilter
implementiert</compatibility>
<summary>
<p>Dieses Module stellt einen Filter zur Verfügung, der Dateien vor der
Auslieferung an den Client verarbeitet. Diese Verarbeitung wird von speziell
formatierten SGML-Kommentaren gesteuert, die als
<dfn>Elemente</dfn> bezeichnet werden. Diese Elemente können die
Einbindung weiterer Dateien und Programme
sowie das Setzen und Ausgeben
von Umgebungsvariablen betreffen.</p>
</summary>
<seealso><directive module="core">Options</directive></seealso>
<seealso><directive module="core">AcceptPathInfo</directive></seealso>
<seealso><a href="../filter.html">Filter</a></seealso>
<seealso><a href="../howto/ssi.html">SSI-Tutorial</a></seealso>
<section id="enabling">
<title>Server-Side Includes aktivieren</title>
<p>Server Side Includes (SSIs) werden mit dem
<code>INCLUDES</code>-<a href="../filter.html">Filter</a>
implementiert. Erhalten Dokumente mit SSI-Direktiven die
Dateinamenserweiterung <code>.shtml</code>, veranlassen folgende
Anweisungen den Apache, diese Dokumente zu untersuchen
und dem Ergebnis den MIME-Typ <code>text/html</code> zuzuweisen:</p>
<example>
AddType text/html .shtml<br />
AddOutputFilter INCLUDES .shtml
</example>
<p>Die folgende Anweisung muss für alle Verzeichnisse mit
<code>.shtml</code>-Dateien gegeben werden (normalerweise in einem
<directive module="core" type="section">Directory</directive>-Abschnitt,
die Anweisung kann aber auch in <code>.htaccess</code>-Dateien stehen,
wenn
<directive module="core">AllowOverride</directive> <code>Options</code>
gesetzt wurde):</p>
<example>
Options +Includes
</example>
<p>Um die Kompatibilität für ältere Versionen zu
gewährleisten,
aktiviert der <code>server-parsed</code>
-<a href="../handler.html">Handler</a> auch den
<code>INCLUDE</code>-Filter. Außerdem aktiviert der Apache
diesen Filter für jedes Dokument mit dem MIME-Typ
<code>text/x-server-parsed-html</code> oder
<code>text/x-server-parsed-html3</code> (wobei die Ausgabe
den Typ <code>text/html</code> erhält).</p>
<p>Weitere Informationen finden Sie im <a
href="../howto/ssi.html">SSI-Tutorial</a>.</p>
</section> <!-- /enabling -->
<section id="pathinfo">
<title>SSI und PATH_INFO</title>
<p>Für SSI verarbeitete Dateien akzeptieren standardmäßig
keine Anfragen mit
<code>PATH_INFO</code> (nachgestellte Pfadinformationen)
mehr. Mit der <directive
module="core">AcceptPathInfo</directive>-Anweisung kann der
Server so konfiguriert werden, dass er Anfragen mit
<code>PATH_INFO</code> akzeptiert.</p>
</section> <!-- /pathinfo -->
<section id="elements"><title>Grundelemente</title>
<p>Das Dokument wird als HTML-Dokument mit speziellen als
SGML-Kommentare eingebetteten Befehlen analysiert. Ein Befehl
hat folgende Syntax: </p>
<example>
<!--#<var>Element</var> <var>Attribut</var>=<var>Wert</var>
<var>Attribut</var>=<var>Wert</var> ... -->
</example>
<p>Der Wert wird häufig in doppelte Anführungszeichen gesetzt.
Einfache
Anführungszeichen (<code>'</code>) oder Häkchen
(<code>`</code>) können ebenfalls benutzt werden.
Bei vielen Befehlen ist lediglich ein einziges Attribut-/Wertpaar
zulässig.
Beachten Sie, dass vor dem Abschlusszeichen eines Kommentars
(<code>--></code>) ein Leerzeichen stehen sollte, damit es nicht als
Bestandteil eines SSI-Elements gewertet wird. Die folgende Tabelle
führt
die möglichen Elemente auf:</p>
<table border="1">
<tr><th>Element</th><th>Beschreibung</th></tr>
<tr><td><code><a href="#element.config">config</a></code></td>
<td>Konfiguration der Ausgabeformate</td></tr>
<tr><td><code><a href="#element.echo">echo</a></code></td>
<td>Ausgabe von Variablen</td></tr>
<tr><td><code><a href="#element.exec">exec</a></code></td>
<td>Ausführung externer Programme</td></tr>
<tr><td><code><a href="#element.fsize">fsize</a></code></td>
<td>Ausgabe der Größe einer Datei</td></tr>
<tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
<td>Ausgabe des Datums der letzten Änderung einer Datei</td></tr>
<tr><td><code><a href="#element.include">include</a></code></td>
<td>Einbinden von Dateien</td></tr>
<tr><td><code><a href="#element.printenv">printenv</a></code></td>
<td>Ausgabe aller verfügbaren Variablen</td></tr>
<tr><td><code><a href="#element.set">set</a></code></td>
<td>Den Wert einer Variablen setzen</td></tr>
</table>
<p>SSI-Elemente können von anderen Modulen als
<module>mod_include</module> definiert werden. Das
<code><a href="#element.exec">exec</a></code>-Element gehört
beispielsweise zu <module>mod_cgi</module> und steht nur zur
Verfügung, wenn dieses Modul geladen ist.</p>
<section id="element.config"><title>Das config-Element</title>
<p>Dieser Befefehl steuert unterschiedliche Aspekte bei der
Auswertung eines Dokuments. Zulässige Attribute sind:</p>
<dl>
<dt><code>echomsg</code> (<em>Ab Apache 2.1</em>)</dt>
<dd>Eine Nachricht, die an den Client zurückgesendet wird, wenn das
<code><a href="#element.echo">echo</a></code>-Element
versucht, eine nicht definierte Variable zurückzuliefern.
Diese Einstellung hat Vorrang vor
<directive module="mod_include">SSIUndefinedEcho</directive>.</dd>
<dt><code>errmsg</code></dt>
<dd>Eine Nachricht, die an den Client zurückgesendet wird,
wenn bei der Untersuchung eines Dokuments Fehler auftreten.
Alle <directive module="mod_include">SSIErrorMsg</directive>-
Anweisungen werden überschrieben.</dd>
<dt><code>sizefmt</code></dt>
<dd>Das Format für die Anzeige der Dateigröße.
Zulässige Werte
sind <code>bytes</code> für die Angabe in Byte oder
<code>abbrev</code> für die Anzeige in kByte oder MByte
nach Gutdünken des Moduls.
Eine Größe von 1.024 Byte wird beispielsweise als "1K"
ausgegeben.</dd>
<dt><code>timefmt</code></dt>
<dd>Eine Zeichenfolge, die von der Bibliotheksroutine
<code>strftime</code> für die Ausgabe von Datumsangaben verwendet
wird.</dd>
</dl>
</section> <!-- /config -->
<section id="element.echo"><title>Das echo-Element</title>
<p>Dieser Befehl führt zur Ausgabe einer der unten aufgeführten
<a href="#includevars">include-Variablen</a>. Wurde die
Variable nicht gesetzt, dann legt die
<directive module="mod_include">SSIUndefinedEcho</directive>-
Anweisung die Ausgabe fest. Das Ausgabeformat von
Datumsangaben hängt von <code>timefmt</code> ab.</p>
<p>Attribute:</p>
<dl>
<dt><code>var</code></dt>
<dd>Anzugeben ist der Name der auszugebenden Variablen.</dd>
<dt><code>encoding</code></dt>
<dd><p>Die Kodierung von Sonderzeichen innerhalb der
Variablen vor der Ausgabe. Bei der Angabe von <code>none</code>
wird keine Kodierung vorgenommen. Bei der Angabe von
<code>url</code> wird die URL-Kodierung benutzt (auch bekannt als
%-Kodierung,
die für URLs in Links usw. gedacht ist). Zu Beginn eines
<code>echo</code>-Elements ist die Voreinstellung
<code>entity</code> für die Entitätskodierung für
HTML-Elemente
auf Blockebene (Textabsätze). Diese Voreinstellung kann mit dem
Attribut <code>encoding</code> geändert werden, welches bis zum
nächsten <code>encoding</code>-Attribut oder bis zum Ende
des Elements gültig bleibt.</p>
<p>Dem <code>var</code>-Attribut muss das entsprechende
<code>encoding</code>-Attribut <em>vorangehen</em>.
Es werden nur Sonderzeichen nach der ISO-8859-1-Kodierung
verschlüsselt. Wird eine andere Zeichenkodierung verwendet,
wird möglicherweise nicht das gewünschte Ergebnis erreicht.</p>
<note type="warning">
Um Probleme zwischen unterschiedlichen Sites zu vermeiden,
sollten von einem Benutzer übermittelte Daten
<em>immer</em> kodiert werden.
</note>
</dd>
</dl>
</section> <!-- /echo -->
<section id="element.exec"><title>Das exec-Element</title>
<p>Der <code>exec</code>-Befehl führt den angebenen Shell-Befehl
oder das angegebene CGI-Skript aus. Dafür muss das
<module>mod_cgi</module>-Modul geladen sein. Wurde
<directive module="core">Options</directive>
<code>IncludesNOEXEC</code> gesetzt, ist dieser Befehl vollständig
deaktiviert. Die zulässigen Attribute sind:</p>
<dl>
<dt><code>cgi</code></dt>
<dd><p>Ein (%-kodierter) URL-Pfad zum CGI-Skript. Beginnt der
Pfad nicht mit einem Slash (/), wird er relativ zum aktuellen Dokument
interpretiert. Das Dokument, auf das mit diesem Pfad verwiesen wird,
wird als CGI-Skript aufgerufen, auch wenn der Server es normalerweise
nicht als solches erkennen würde. Das Verzeichnis, in welchem sich
das Skript befindet, muss jedoch für CGI-Skripte freigeschaltet sein
(mit <directive module="mod_alias">ScriptAlias</directive>
oder <directive module="core">Options</directive>
<code>ExecCGI</code>).</p>
<p>Dem CGI-Skript werden Pfadinformationen und der
<code>QUERY_STRING</code> der
ursprünglichen Client-Anfrage übergeben. Diese Angaben
können
<em>nicht</em> über den URL-Pfad erfolgen. Neben der
standardmäßigen <a href="mod_cgi.html">CGI</a>-Umgebung
stehen dem Skript die Include-Variablen zur Verfügung.</p>
<example><title>Beispiel</title>
<!--#exec cgi="/cgi-bin/example.cgi" -->
</example>
<p>Liefert das Skript anstelle einer Ausgabe einen
<code>Location:</code>-Header zurück, dann wird dieser in einen
HTML-Anker umgewandelt.</p>
<p>Das <code><a href="#includevirtual">include virtual</a></code>-
Element sollte dem <code>exec cgi</code>-Element gegenüber vorgezogen
werden. Insbesondere dann, wenn zusätzliche Argument mit der
Anfragezeichenfolge an ein CGI-Programm übergeben werden müssen,
kann dies nicht mit <code>exec cgi</code> geschehen, sondern kann
wie folgt mit <code>include virtual</code> geschehen:</p>
<example>
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
</example>
</dd>
<dt><code>cmd</code></dt>
<dd><p>Der Server führt die übergebene Zeichenfolge aus und
benutzt hierbei
<code>/bin/sh</code>. Die <a href="#includevars">Include-Variablen</a>
stehen dem Befehl neben den üblichen CGI-Variablen zur
Verfügung.</p>
<p>In fast allen Fällen ist <code><a href="#includevirtual"
>#include virtual</a></code> den Anweisungen
<code>#exec cgi</code> oder <code>#exec cmd</code> gegenüber
vorzuziehen. <code>#include virtual</code> verwendet den
standardmäßigen Apache-Mechanismus für die Einbindung von
Dateien
oder Skripten. Die Anweisung ist viel erprobter und auf aktuellerem
Stand.</p>
<p>Außerdem können bei Betriebssystemen wie Win32
(und Unix bei Verwendung von <a href="../suexec.html">suexec</a>)
keine Argumente an einen Befehl in einer <code>exec</code>-Anweisung
übergeben oder Leerstellen in den Befehl eingefügt werden.
Folgende
Anweisung funktioniert beispielsweise ohne <code>suexec</code>
unter Unix, führt aber unter Win32 oder bei Ausführung von
<code>suexec</code> nicht zum gewünschten Ergebnis:</p>
<example>
<!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
</example>
</dd>
</dl>
</section> <!-- /exec -->
<section id="element.fsize"><title>Das fsize-Element</title>
<p>Dieser Befehl gibt die Größe der angegebenen Datei aus,
unter
Verwendung der durch <code>sizefmt</code> festgelegten Formatangabe.
Mögliche Attribute sind:</p>
<dl>
<dt><code>file</code></dt>
<dd>Ein zum Verzeichnis des untersuchten Dokuments relativer
Pfad.</dd>
<dt><code>virtual</code></dt>
<dd>Ein %-kodierter URL-Pfad. Beginnt er nicht mit einem Slash (/),
wird er relativ zum aktuellen Dokument interpretiert. Beachten Sie, dass
<em>nicht</em> der Umfang einer CGI-Ausgabe ausgegeben wird,
sondern die Größe des CGI-Skripts selbst.</dd>
</dl>
</section> <!-- /fsize -->
<section id="element.flastmod"><title>Das flastmod-Element</title>
<p>Dieser Befehl gibt das Datum der letzten Änderung der angegebenen
Datei aus, unter Verwendung der durch <code>timefmt</code> festgelegten
Formatangabe. Die Attribute sind die gleichen wie beim
<code><a href="#element.fsize">fsize</a></code>-Befehl.</p>
</section> <!-- /flastmod -->
<section id="element.include"><title>Das include-Element</title>
<p>Dieser Befehl fügt den Text eines anderen Dokuments oder einer
anderen Datei in die bearbeitete Datei ein. Alle eingefügten Dateien
unterliegen der üblichen Zugriffskontrolle. Wurde für das
Verzeichnis
der bearbeiteten Datei <a href="core.html#options">Options</a>
<code>IncludesNOEXEC</code> gesetzt, werden nur Dokumente
mit den MIME-Typen der Klasse <code>text/plain</code>,
<code>text/html</code>
usw. eingebunden. Andernfalls werden CGI-Skripte wie gewöhnlich
mit der dem Befehl übergebenen URL (einschließlich
Anfragezeichenfolge)
aufgerufen.</p>
<p>Das Attribut gibt die Position des Dokuments an. Die Einbindung
erfolgt für jedes der <code>include</code>-Anweisung übergebene
Attribut.
Zulässige Attribute sind:</p>
<dl>
<dt><code>file</code></dt>
<dd>Ein zum Verzeichnis des gerade bearbeiteten Dokuments
relativer Pfad. Er darf weder die Schreibweise <code>../</code>
enthalten, noch darf es ein absoluter Pfad sein. Somit können keine
Dateien eingebunden werden, die außerhalb des Dokumentverzeichnisses
oder oberhalb des aktuellen Dokuments in der Verzeichnisstruktur liegen.
Das Attribut <code>virtual</code> sollte diesem
Attribut gegenüber immer vorgezogen werden.</dd>
<dt><code><a id="includevirtual" name="includevirtual"
>virtual</a></code></dt>
<dd><p>Ein %-kodierter URL-Pfad. Die URL darf kein
Schema oder einen Host-Namen enthalten, lediglich ein Pfad oder
ein optionaler Query-String sind zulässig. Steht kein
Slash (/) am Anfang, wird der Pfad relativ zum aktuellen Dokument
interpretiert.</p>
<p>Eine URL wird aus dem Attribut gebildet und die Ausgabe,
die der Server zurückliefern würde, wenn der Client auf die URL
zugreifen würde, wird in die bearbeitete Ausgabe eingebunden. Auf
diese Weise
können eingebundene Dateien geschachtelt werden.</p>
<p>Handelt es sich bei der angegebenen URL um ein CGI-Programm,
wird dieses Programm ausgeführt und dessen Ausgabe anstelle
der Anweisung in die bearbeitete Datei eingefügt. Eine CGI-URL
darf einen Query-String enthalten:</p>
<example>
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
</example>
<p><code>include virtual</code> sollte für die Einbindung von
Ausgaben von CGI-Programmen in einem HTML-Dokument
gegenüber <code>exec cgi</code> vorgezogen werden.</p>
</dd>
</dl>
</section> <!-- /include -->
<section id="element.printenv"><title>Das printenv-Element</title>
<p>Gibt eine Liste aller vorhandenen Variablen und ihrer Werte aus.
Sonderzeichen werden vor der Ausgabe
nach der Entitätskodierung verschlüsselt
(Einzelheiten hierzu finden Sie beim
<code><a href="#element.echo">echo</a></code>-Element).
Diese Anweisung übernimmt interpetiert keine Attributwerte.</p>
<example><title>Beispiel</title>
<!--#printenv -->
</example>
</section> <!-- /printenv -->
<section id="element.set"><title>Das set-Element</title>
<p>Hiermit wird der Wert einer Variablen gesetzt. Die
Attribute sind:</p>
<dl>
<dt><code>var</code></dt>
<dd>Der Name der zu setzenden Variablen.</dd>
<dt><code>value</code></dt>
<dd>Der dieser Variable zuzuweisende Wert.</dd>
</dl>
<example><title>Beispiel</title>
<!--#set var="category" value="help" -->
</example>
</section> <!-- /set -->
</section> <!-- /basic elements -->
<section id="includevars">
<title>Include-Variablen</title>
<p>Zusätzlich zu den standardmäßigen Variablen der
CGI-Umgebung
stehen diese Include-Variablen für den <code>echo</code>-Befehl, die
<code>if</code>- und die <code>elif</code>-Anweisung sowie
für jedes über das Dokument aufgerufene Programm zur
Verfügung.</p>
<dl>
<dt><code>DATE_GMT</code></dt>
<dd>Das aktuelle Datum nach GMT.</dd>
<dt><code>DATE_LOCAL</code></dt>
<dd>Das aktuelle Datum der lokalen Zeitzone.</dd>
<dt><code>DOCUMENT_NAME</code></dt>
<dd>Der Dateiname (ohne Verzeichnisangabe) des vom
Benutzer angeforderten Dokuments.</dd>
<dt><code>DOCUMENT_URI</code></dt>
<dd>Die %-kodierte URL des vom Benutzer angeforderten
Dokuments. Bei verschachtelten Include-Dateien ist dies
<em>nicht</em> die URL des aktuellen Dokuments.</dd>
<dt><code>LAST_MODIFIED</code></dt>
<dd>Das Datum der letzten Änderung des vom Benutzer
angeforderten Dokuments.</dd>
<dt><code>QUERY_STRING_UNESCAPED</code></dt>
<dd>Ist ein Query-String vorhanden, enthält diese Variable den
die %-dekodierten Query-String, die für eine Verwendung innerhalb
einer (UNIX-)Shell geeignet 'escaped' wurde.</dd>
</dl>
</section>
<section id="substitution"><title>Variablensubstitution</title>
<p>Variablensubstitution bei Zeichenfolgen in Anführungszeichen
erfolgt meist dann, wenn diese sinnvollerweise als Argument einer
SSI-Direktive auftreten können. Hierzu gehören die
Anweisungen<code>config</code>,
<code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
<code>include</code>, <code>echo</code> und <code>set</code>
sowie die Argumente für Bedingungsoperatoren.
Durch Voranstellung eines Backslash kann ein Dollarzeichen in
eine Zeichenfolge eingefügt werden:</p>
<example>
<!--#if expr="$a = \$test" -->
</example>
<p>Muss ein Variablenverweis in der Mitte einer Zeichenfolge
ersetzt werden, die selbst als gültiger Bezeichner gelten kann, wird
die Mehrdeutigkeit durch geschweifte Klammern aufgehoben, genau wie
das bei der Ersetzung innerhalb einer (UNIX-)Shell der Fall wäre:</p>
<example>
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
</example>
<p>Die Variable <code>Zed</code> wird
"<code>X_Y</code>" gesetzt, wenn <code>REMOTE_HOST</code> den Wert
"<code>X</code>" und <code>REQUEST_METHOD</code> den Wert
"<code>Y</code>" enthält.</p>
<p>Im folgenden Beispiel wird "in foo" ausgegeben, wenn
<code>DOCUMENT_URI</code> gleich <code>/foo/file.html</code> ist
und "in bar", wenn es gleich <code>/bar/file.html</code> ist, andernfalls
wird in keinem von beiden ausgegeben:</p>
<example>
<!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --><br />
<indent>
in foo<br />
</indent>
<!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --><br />
<indent>
in bar<br />
</indent>
<!--#else --><br />
<indent>
in neither<br />
</indent>
<!--#endif -->
</example>
</section>
<section id="flowctrl">
<title>Elemente zur Flusskontrolle</title>
<p>Die wichtigsten Elemente zur Flusskontrolle sind:</p>
<example>
<!--#if expr="<var>Testbedingung</var>" --><br />
<!--#elif expr="<var>Testbedingung</var>" --><br />
<!--#else --><br />
<!--#endif -->
</example>
<p>Das <code>if</code>-Element funktioniert wie die <code>if</code>-
Anweisung einer Programmiersprache. Die Testbedingung wird ausgewertet und
wenn das Ergebnis wahr ist, dann wird der Text bis zum nächsten
<code>elif</code>-,
<code>else</code>- oder <code>endif</code>-Element in den Ausgabestrom
eingebaut.</p>
<p>Mit der <code>elif</code>- oder <code>else</code>-Anweisung
wird Text in den Ausgabestrom eingebunden, wenn die ursprüngliche
<var>Testbedingung</var> nicht erfüllt ist. Diese Elemente sind
optional.</p>
<p>Das <code>endif</code>-Element schließt das <code>if</code>-
Element ab und ist erforderlich.</p>
<p>Die <var>Testbedingung</var> kann folgendermaßen
aussehen:</p>
<dl>
<dt><code><var>String</var></code></dt>
<dd>Die Bedingung ist erfüllt, wenn <var>String</var> nicht leer
ist.</dd>
<dt><code><var>String1</var> = <var>String2</var><br />
<var>String1</var> == <var>String2</var><br />
<var>String1</var> != <var>String2</var></code></dt>
<dd><p>Vergleiche <var>String1</var> mit <var>String2</var>. Wenn
<var>String2</var> die Form <code>/<var>String2</var>/</code>
hat, wird er als regulärer Ausdruck behandelt. Reguläre
Ausdrücke werden
mit der <a href="http://www.pcre.org">PCRE</a>-Bibliothek implementiert
und
haben die gleiche Syntax wie in <a href="http://www.perl.com">Perl
5</a>. Die Schreibweise <code>==</code> entspricht der Schreibweise
<code>=</code> und hat die gleiche Wirkung.</p>
<p>Beim positiven Vergleich (<code>=</code> oder
<code>==</code>) können gruppierte Teile des regulären Ausdrucks
erfasst werden. Die erfassten Teile werden in den speziellen
Variablen <code>$1</code> ..
<code>$9</code> gespeichert.</p>
<example><title>Beispiel</title>
<!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --><br />
<indent>
<!--#set var="session" value="$1" --><br />
</indent>
<!--#endif -->
</example>
</dd>
<dt><code><var>String1</var> < <var>String2</var><br />
<var>String1</var> <= <var>String2</var><br />
<var>String1</var> > <var>String2</var><br />
<var>String1</var> >= <var>String2</var></code></dt>
<dd>Vergleiche <var>String1</var> mit <var>String2</var>. Die
Zeichenfolgen werden <em>Zeichen für Zeichen</em>
miteinander verglichen (mit <code>strcmp(3)</code>). Daher ist die
Zeichenfolge "100" kleiner als die Zeichenfolge "20".</dd>
<dt><code>( <var>Testbedingung</var> )</code></dt>
<dd>Ist erfüllt, wenn <var>Testbedingung</var> erfüllt ist.</dd>
<dt><code>! <var>Testbedingung</var></code></dt>
<dd>Ist erfüllt, wenn <var>Testbedingung</var> nicht erfüllt
ist.</dd>
<dt><code><var>Testbedingung1</var> &&
<var>Testbedingung2</var></code></dt>
<dd>Ist erfüllt, wenn <var>Testbedingung1</var> und
<var>Testbedingung2</var> erfüllt sind.</dd>
<dt><code><var>Testbedingung1</var> ||
<var>Testbedingung2</var></code></dt>
<dd>Ist erfüllt, wenn <var>Testbedingung1</var> oder
<var>Testbedingung2</var> erfüllt ist.</dd>
</dl>
<p>"<code>=</code>" und "<code>!=</code>" binden enger als
"<code>&&</code>" und "<code>||</code>". "<code>!</code>"
bindet am stärksten. Die folgenden Anweisungen sind
gleichbedeutend:</p>
<example>
<!--#if expr="$a = test1 && $b = test2" --><br />
<!--#if expr="($a = test1) && ($b = test2)" -->
</example>
<p>Die Boole'schen Operatoren <code>&&</code> und
<code>||</code> haben die gleiche Priorität. Soll ein solcher Operator
stärker gebunden werden, müssen Klammern gesetzt werden.</p>
<p>Alles, was nicht als Variable oder Operator erkannt wird,
wird wie eine Zeichenfolge behandelt. Zeichenfolgen können auch in
Anführungszeichen stehen: <code>'string'</code>. Steht eine
Zeichenfolge nicht in Anführungszeichen, dann darf sie keinen
Whitespace (Leerzeichen oder Tabulatoren) enthalten, weil diese Zeichen die
Bestandteile von Anweisungen voneinander trennen. Stehen mehrere
Zeichenfolgen in einer Zeile, werden Sie mit Leerzeichen verkettet:</p>
<example>
<p><code><var>String1</var> <var
>string2</var></code> ergibt <code><var>String1</var> <var
>string2</var></code><br />
<br />
und<br />
<br />
<code>'<var>String1</var> <var
>string2</var>'</code> ergibt <code><var
>string1</var> <var>String2</var></code>.</p>
</example>
<note><title>Optimierung Boole'scher Ausdrücke</title>
<p>Werden Ausdrücke immer komplexer, so dass sie die Verarbeitung
deutlich bremsen, dann können sie entsprechend der Auswertungsregeln
optimiert werden:</p>
<ul>
<li>Ausdrücke werden von links nach rechts ausgewertet.</li>
<li>Binäre Boole'sche Operatoren (<code>&&</code>
und <code>||</code>) werden, falls möglich, kurz geschlossen. In
Übereinstimmung mit der oben aufgeführten Regel bedeutet das,
dass <module>mod_include</module> zuerst den linken Ausdruck auswertet.
Reicht das Ergebnis aus, um das Endergebnis zu bestimmen, wird
die weitere Verabeitung an dieser Stelle abgebrochen. Trifft das nicht zu,
wird die rechte Seite ausgewertet und das Endergebnis anhand der
Ergebnisse
der linken und der rechten Seite berechnet.</li>
<li>Solange reguläre Ausdrücke behandelt werden müssen,
wird die
verkürzte Auswertung nicht wirksam. Diese müssen ausgewertet
werden,
um die Rückverweisvariablen (<code>$1</code> .. <code>$9</code>)
zuzuweisen.</li>
</ul>
<p>Wenn Sie nachvollziehen möchten, wie ein bestimmter Ausdruck
behandelt wird, können Sie <module>mod_include</module>
mit der Compileroption <code>-DDEBUG_INCLUDE</code> noch
einmal kompilieren. Für jeden untersuchten Ausdruck erhalten Sie dann
Informationen zu den Elementen, der Reihenfolge und das Resultat der
Auswertung, die mit der Ausgabe an den Client gesendet werden.</p>
</note>
</section>
<directivesynopsis>
<name>SSIEndTag</name>
<description>Die Zeichenfolge, die ein Include-Element beendet.</description>
<syntax>SSIEndTag <var>Tag</var></syntax>
<default>SSIEndTag "-->"</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Verfügbar ab Version 2.0.30.</compatibility>
<usage>
<p>Mit dieser Anweisung wird die Zeichenfolge geändert, die
<module>mod_include</module> das Ende eines Include-Elements
signalisiert.</p>
<example><title>Beispiel</title>
SSIEndTag "%>"
</example>
</usage>
<seealso><directive module="mod_include">SSIStartTag</directive></seealso>
</directivesynopsis>
<directivesynopsis>
<name>SSIUndefinedEcho</name>
<description>Die Zeichenfolge, die angezeigt wird, wenn der Inhalt
einer nicht gesetzten Variablen mit der Anweisung 'echo'
ausgegeben werden soll.</description>
<syntax>SSIUndefinedEcho <var>String</var></syntax>
<default>SSIUndefinedEcho "(none)"</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>
<compatibility>Ab Version 2.0.34</compatibility>
<usage>
<p>Mit dieser Anweisung wird die Zeichenfolge geändert, die
<module>mod_include</module> anzeigt, wenn
der Inhalt einer nicht gesetzten Variable mit 'echo' ausgegeben
werden soll.</p>
<example><title>Beispiel</title>
SSIUndefinedEcho "<!-- undef -->"
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>SSIErrorMsg</name>
<description>Die Fehlermeldung, die bei einem SSI-Fehler angezeigt
wird.</description>
<syntax>SSIErrorMsg <var>Meldung</var></syntax>
<default>SSIErrorMsg "[an error occurred while processing this
directive]"</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>
<compatibility>Ab Version 2.0.30</compatibility>
<usage>
<p>Mit der <directive>SSIErrorMsg</directive>-Direktive wird die
Fehlermeldung geändert, die angezeigt wird, wenn
<module>mod_include</module> auf einen Fehler stößt.
Für den produktiven Einsatz kann die Standardfehlermeldung
beispielsweise in <code>"<!-- Fehler -->"</code>
geändert werden, damit die Meldung dem Benutzer nicht angezeigt
wird.</p>
<p>Diese Anweisung liefert das gleiche Ergebnis wie
<code><!--#config errmsg=<var>Meldung</var> --></code>-Element.</p>
<example><title>Beispiel</title>
SSIErrorMsg "<!-- Error -->"
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>SSIStartTag</name>
<description>Die Zeichenfolge, mit der ein Include-Element
beginnt.</description>
<syntax>SSIStartTag <var>Tag</var></syntax>
<default>SSIStartTag "<!--#"</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Ab Version 2.0.30</compatibility>
<usage>
<p>Mit dieser Anweisung wird die Zeichenfolge geändert, an dem
<module>mod_include</module> ein zu verarbeitendes
Include-Element erkennt.</p>
<p>Die Möglichkeit kann bei zwei Servern genutzt werden, die die
Ausgabe
einer Datei untersuchen und jeweils unterschiedliche Befehle verarbeiten
(möglicherweise zu unterschiedlichen Zeiten).</p>
<example><title>Beispiel</title>
SSIStartTag "<%"
</example>
<p>In Verbindung mit einem übereinstimmenden
<directive module="mod_include">SSIEndTag</directive> können
SSI-Anweisungen so verwendet werden, wie das in dem
nachfolgenden Beispiel der Fall ist:</p>
<example><title>SSI-Anweisungen mit alternativen Start- und End-Tags</title>
<%printenv %>
</example>
</usage>
<seealso><directive module="mod_include">SSIEndTag</directive></seealso>
</directivesynopsis>
<directivesynopsis>
<name>SSITimeFormat</name>
<description>Konfiguration des Formats zur Anzeige von
Datumswerten</description>
<syntax>SSITimeFormat <var>Format-String</var></syntax>
<default>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</default>
<contextlist>
<context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>
<compatibility>Ab Version 2.0.30</compatibility>
<usage>
<p>Der Format-String muß so angegeben werden,
wie dies für einen Parameterwert der <code>strftime(3)</code>-Funktion der
C-Standardbibliothek der Fall wäre.</p>
<p>Diese Anweisung liefert das gleiche Ergebnis wie
das <code><!--#config timefmt=<var>formatstring</var> --></code>-
Element.</p>
<example><title>Beispiel</title>
SSITimeFormat "%R, %B %d, %Y"
</example>
<p>Diese Anweisung sorgt dafür, dass Zeitangaben im Format
"22:26, June 14, 2002" erfolgen.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>XBitHack</name>
<description>SSI-Direktiven in Dateien mit gesetztem Execute-Bit werden
ausgewertet.</description>
<syntax>XBitHack on|off|full</syntax>
<default>XBitHack off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Options</override>
<usage>
<p>Mit der <directive>XBitHack</directive>-Anweisung wird die
Untersuchung gewöhnlicher HTML-Dokumente gesteuert. Sie
betrifft ausschließlich Dateien des MIME-Typs <code>text/html</code>.
Folgende Werte können angegeben werden:</p>
<dl>
<dt><code>off</code></dt>
<dd>Keine besondere Behandlung ausführbarer Dateien.</dd>
<dt><code>on</code></dt>
<dd>Alle <code>text/html</code>-Dateien mit gesetztem
User-Execute-Bit werden als vom Server auszuwertendes
HTML-Dokument behandelt.</dd>
<dt><code>full</code></dt>
<dd>Gleichbedeutend mit <code>on</code>, zusätzlich wird aber
noch das Group-Execute-Bit überprüft. Ist es gesetzt, wird das
<code>Last-modified</code>-Datum der zurückgesendeten Datei
als Datum der letzten Änderung gesetzt. Ist es nicht gesetzt, wird
kein Datum
der letzten Änderung gesendet. Wenn dieses Bit gesetzt wird,
können
Clients und Proxies das Ergebnis der Anfrage zwischenspeichern.
<note><title>Note</title>
<p>Die Verwendung der Option <code>full</code> ist nicht ratsam,
es sei denn, Sie sind
in der Lage, sicherzustellen, dass das group-execute Bits für alle
SSI-Skripte, welche CGI-Skripte einbinden oder auf andere Weise
bei jedem Zugriff wechselnde Ausgaben liefern, nicht gesetzt ist.</p>
</note>
</dd>
</dl>
</usage>
</directivesynopsis>
</modulesynopsis>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]