<?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 untersuchte 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 bearbeitet. Diese Verarbeitung wird von speziell
formatierten SGML-Kommentaren gesteuert, die als
<dfn>Elemente</dfn> bezeichnet werden. Diese Elemente können
zusätzlichen
Text, weitere 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 die
<code>INCLUDES</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>Ausgabevariablen</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>Ausgabegröß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>Dateien einbinden</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 wird.</p>
<section id="element.config"><title>Das config-Element</title>
<p>Dieser Befefehl steuert unterschiedliche Aspekte bei der
Untersuchung 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.
<directive module="mod_include">SSIUndefinedEcho</directive>-
Anweisungen werden dadurch überschrieben.</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.
Eine Größe von 1.024 Byte wird beispielsweise als "1K"
ausgegeben.</dd>
<dt><code>timefmt</code></dt>
<dd>Eine Zeichenfolge für die <code>strftime(3)</code>-
Bibliotheksroutine für die Datumsausgabe.</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>Angegeben wird 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 (die %-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>encoding</code>-Attribut muss das entsprechende
<code>var</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 Benutzerdaten <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 aktviert sein
(mit <directive module="mod_alias">ScriptAlias</directive>
oder <directive module="core">Options</directive>
<code>ExecCGI</code>).</p>
<p>Dem CGI-Skript wird <code>PATH_INFO</code> und die
Abfragezeichenfolge (<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 muss
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>Fast immer wird <code><a href="#includevirtual"
>#include virtual</a></code> den Anweisungen
<code>#exec cgi</code> oder <code>#exec cmd</code> gegenüber
vorgezogen. <code>#include virtual</code> verwendet den
standardmäßigen Apache-Mechanismus für die Einbindung von
Dateien
oder Skripten. Die Anweisung ist 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, die
Gegenstand der <code>sizefmt</code>-Formatangabe ist. 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. Ausgegeben wird
<em>nicht</em> der Umfang einer CGI-Ausgabe, 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, das Gegenstand der <code>timefmt</code>-Formatanweisung
ist. 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 <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>Ein 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 kann 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
eine optionale Abfragezeichenfolge 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
kann eine Abfragezeichenfolge 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).
Attribute werden nicht übergeben.</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>Die Bezeichnung der zu setzenden Variablen.</dd>
<dt><code>value</code></dt>
<dd>Der 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>Neben den standardmäßigen Variablen der CGI-Umgebung
stehen die 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 eine Abfragezeichenfolge vorhanden, enthält diese Variable
die %-kodierte Abfragezeichenfolge, in der Sonderzeichen wie
<code>&</code> usw. ein Backslash vorangestellt wird.</dd>
</dl>
</section>
<section id="substitution"><title>Variablensubstitution</title>
<p>Variablensubstitution bei Zeichenfolgen in Anführungszeichen
erfolgt meist dann, wenn sie als Argument für eine SSI-Anweisung
dienen 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 Dollarzeichens 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 Zweideutigkeit durch geschweifte Klammern aufgehoben:</p>
<example>
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
</example>
<p>Die Variable <code>Zed</code> wird auf
"<code>X_Y</code>" gesetzt, wenn <code>REMOTE_HOST</code>
"<code>X</code>" und <code>REQUEST_METHOD</code>
"<code>Y</code>" ist.</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 neither" 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
ist das Ergebnis wahr, 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>-Engine 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 Aneisungen 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 keine
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, verkürzt. 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, das mit der Ausgabe an den Client gesendet wird.</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 eine nicht
gesetzte Variable signalisiert wird.</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 eine Variable nicht gesetzt
wurde.</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 praktischen Einsatz kann die Standardfehlermeldung
beispielsweise in <code>"<!-- Error -->"</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, die
<module>mod_include</module> ein zu verarbeitendes
Include-Element signalisiert.</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 auch
SSI-Anweisungen benutzt werden:</p>
<example><title>SSI-Anweisungen mit wechselnden Start- und End-Tags</title>
<%printenv %>
</example>
</usage>
<seealso><directive module="mod_include">SSIEndTag</directive></seealso>
</directivesynopsis>
<directivesynopsis>
<name>SSITimeFormat</name>
<description>Konfiguration des Datumsformats</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>Mit dieser Anweisung wird das Format der Datumsausgabe geändert,
wenn die <code>DATE</code>-Umgebungsvariablen angezeigt werden. Der
<var>Format-String</var> entspricht der Funktion <code>strftime(3)</code>
der C-Standardbibliothek.</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
untersucht.</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 übergeben 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 untersuchtes
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ückgesenden 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 Option <code>full</code> sollte nur gesetzt werden, wenn das
Group-Execute-Bit für alle SSI-Skripte nicht gesetzt ist, die eine
<code>#include</code>-Anweisung für CGI enthalten oder auf andere
Weise bei jeder Anfrage unterschiedliche Ausgaben liefern (oder die sich
möglicherweise nach Anfragen ändern können).</p>
</note>
</dd>
</dl>
</usage>
</directivesynopsis>
</modulesynopsis>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]