Webserver/SSI

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Achtung!

Die Unterstützung von SSI seitens der Hoster ist rückläufig.

Mithilfe von Server Side Includes (auch unter der Abkürzung SSI bekannt) können Sie direkt innerhalb von HTML-Dateien dynamische Informationen, z. B. Datum und Uhrzeit, einbinden. Sie können auch CGI-Programme starten und deren Ausgaben, beispielsweise einen Zählerstand mit der Anzahl von Zugriffen auf die aktuelle Datei, in die HTML-Datei einbinden. Oder Sie geben den aktuellen Inhalt diverser CGI-Umgebungsvariablen direkt in HTML aus – ohne Umweg über ein separates CGI-Script. Server Side Includes sind generell dazu gedacht, kleinere Teile einer HTML-Seite dynamisch einzubinden.

Server Side Includes werden nur ausgeführt, wenn der Web-Browser die HTML-Datei über einen installierten Webserver aufruft, also mit einem URI vom Typ http://…. Voraussetzung ist ferner, dass der installierte Webserver die Server Side Includes unterstützt. Nicht alle Webserver tun das, andere interpretieren nur einen Teil der möglichen Angaben. Wenn der Server keine Server Side Includes kennt, funktionieren die entsprechenden Anweisungen in der HTML-Datei nicht. Beim Austesten mit einem lokal installierten Webserver lesen Sie hierzu bitte in der Dokumentation des Servers nach. Beim Einsatz auf einem öffentlichen Webserver fragen Sie Ihren Provider, ob dessen Webserver die Server Side Includes unterstützt.

Damit ein Webserver sofort erkennt, ob eine HTML-Datei SSI-Anweisungen enthält, ist es üblich, solche HTML-Dateien mit einer speziellen Dateinamenendung zu kennzeichnen. Gewöhnlich lauten die Dateiendungen .shtml, .shtm oder .sht. Die meisten Server ignorieren SSI-Anweisungen, wenn diese in einer gewöhnlichen HTML-Datei mit der Endung .htm oder .html stehen. In der Datei .htaccess lassen sich diesbezüglich Einstellungen vornehmen.

Beispiel

Beispiel
<!doctype HTML>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dynamisches HTML mit Server Side Includes</title>
  </head>
  <body>
   <h1>Dynamisches HTML mit Server Side Includes</h1>
   <dl>
     <dt>Datum/Uhrzeit auf dem Server-Rechner:</dt>  
     <dd><!--#config timefmt="%d.%m.%Y, %H.%M" --><!--#echo var="DATE_LOCAL" --> Uhr</dd>
     <dt>Name dieser HTML-Datei:</dt>
     <dd><!--#echo var="DOCUMENT_NAME" --></dd>
     <dt>Installierte Server-Software:</dt>
     <dd><!--#echo var="SERVER_SOFTWARE" --></dd>
     <dt>Ihr Web-Browser:</dt>
     <dd><!--#echo var="HTTP_USER_AGENT" --></dd>
   </dl>
   <h3>Weitere Informationen:</h3>
   <!--#exec cgi="/cgi-bin/plapper.pl" -->
  </body>
</html>
#!/usr/bin/perl -w

print "Content-type: text/html\n\n";
print "<p>Aha, Sie haben das Script \"plapper.pl\" zusätzlich aufgerufen.<br>\n";
print "Das ist nett von Ihnen, aber es plappert gar nicht sehr viel.</p>\n";

Server Side Includes müssen Sie in einem HTML-Dokument innerhalb eines Kommentars notieren. Es gibt verschiedene SSI-Anweisungen, beginnend mit einem Gatterzeichen #. Im obigen Beispiel kommen die Anweisungen #echo und #exec vor. Hinter der Anweisung folgt in der Regel eine Angabe der Art Typ="Wert". Im Zusammenhang mit der Anweisung #echo ist beispielsweise die Angabe var="Variablenname" erlaubt, wobei "Variablenname" ein bestimmter, erlaubter Name sein muss. Es kann sich um Namen von CGI-Umgebungsvariablen handeln oder um spezielle SSI-Variablennamen. Bei der Anweisung #exec, die ein Programm auf dem Server-Rechner ausführt, müssen Sie den Typ des Programms (im obigen Beispiel: cgi) und als Wert die Adresse des ausführbaren Programms (im obigen Beispiel: "/cgi-bin/plapper.pl") angeben.

Übersicht wichtiger Server Side Includes

Achtung!

Die Unterstützung von SSI seitens der Hoster ist rückläufig.

#printenv

Mit dem Befehl #printenv (print environment, drucke Umgebung) können Sie sich alle definierten Variablen und deren Inhalt anzeigen lassen.

#config

Mit dem #config-Befehl können Sie

  • einen Fehlermeldungstext festlegen,
  • die Einheit für die Angabe von Dateigrößen bestimmen,
  • Zeitangaben formatieren.
errmsg

errmsg ist sinnvoll, um bei nicht anzeigbaren Server Side Includes eine verständliche Fehlermeldung auszugeben.

Beispiel
<!--#config errmsg="SSI können nicht ausgeführt werden." -->
sizefmt

sizefmt bestimmt das Format für Dateigrößenangaben, z. B. sinnvoll vor dem Gebrauch von #fsize.

Erlaubte Werte:

  • abbrev, Dateigrößenangaben erfolgen in Kbyte
  • bytes, Dateigrößenangaben erfolgen in Byte
timefmt

timefmtbestimmt das Ausgabeformat für Datums- bzw. Uhrzeitangaben.

Beispiel
<!--#config timefmt="%d.%m.%Y, %H.%M" -->

Erlaubte Platzhalter:

  •  %a = Wochentag kurz, z. B. sat
  •  %A = Wochentag lang, z. B. Saturday
  •  %b = Monat kurz, z. B. Apr
  •  %B = Monat lang, z. B. April
  •  %d = Tag im Monat zweistellig, z. B. 09
  •  %e = Tag im Monat einstellig, z. B. 9
  •  %H = Uhrzeit 24stündig, z. B. 15
  •  %I = Uhrzeit 12stündig, z. B. 03
  •  %j = julianisches Datum, z. B. 278
  •  %m = Monat als Zahl, z. B. 05
  •  %M = Minuten nach Stunde, z. B. 07
  •  %p = bei%I: AM/PM, z. B. PM
  •  %S = Sekunden, z. B. 01
  •  %U = Kalenderwoche, z. B. 52
  •  %w = n-ter Tag der Woche, z. B. 5
  •  %y = Jahr 2stellig, z. B. 97
  •  %Y = Jahr 4stellig, z. B. 1997
  •  %Z = Zeitzone, z. B. MEZ

Mehrere Angaben lassen sich zusammenfassen.

Beispiel
<!--#config errmsg="SSI können nicht ausgeführt werden." sizefmt="abbrev" -->

#echo

#echo gibt den Inhalt einer oder mehrerer Variablen aus.

Beispiel
<!--#echo var="DATE_LOCAL" --> <!--#echo var='HTTP_HOST' var='REQUEST_URI' -->

Als Variablennamen sind CGI-Umgebungsvariablen, selbst definierte Variablen sowie die folgenden speziellen Variablennamen erlaubt:

  • DOCUMENT_NAME, Name der HTML-Datei
  • DOCUMENT_URI, Pfad der HTML-Datei
  • LAST_MODIFIED, Zeitstempel der HTML-Datei
  • QUERY_STRING_UNESCAPED, Unkodierter GET-Übergabestring
  • DATE_LOCAL, Datum/Uhrzeit nach Server
  • DATE_GMT, Datum/Uhrzeit nach Greenwich-Zeit

#exec

#exec gestattet das Ausführen von Programmen oder Skripten auf dem Serverrechner.

cmd

Benutzen Sie cmd, um ein beliebiges Programm auf dem Servercomputer zu starten.

Beispiel
<!--#exec cmd="/prog/search.exe *.html" -->
Auf dem Servercomputer wird das (fiktive) Programm „search.exe“ gestartet, um nach Dateien mit der Endung „.html“ zu suchen.
cgi

Benutzen Sie cgi, um ein CGI-Programm/CGI-Script auf dem Serverrechner auszuführen.

Beispiel
<!--#exec cgi="/cgi-bin/counter.pl" -->
Auf dem Servercomputer wird das Perl-Script „counter.pl“ gestartet, etwa um Zugriffszahlen zu protokollieren.
Beachten Sie: Es sollte sich um Programme handeln, die Daten auf die Standardausgabe schreiben. Diese Datenausgaben werden dann direkt in die HTML-Datei geschrieben.

#fsize

#fsize gibt die Größe der angegebenen Datei aus.

file

Verwenden Sie file für Pfadangaben auf dem Server-Rechner relativ zur Datei mit den SSI-Anweisungen ...

virtual

... und virtual für relative Pfadangaben bezogen auf das Wurzelverzeichnis für Dokumente des Webservers.

Beispiel
<!--#fsize virtual="/download/selfhtml.zip" -->

#flastmod

#flastmod gibt den Zeitstempel der angegebenen Datei aus.

file

Verwenden Sie file für Pfadangaben auf dem Server-Rechner relativ zur Datei mit den SSI-Anweisungen …

virtual

… und virtual für relative Pfadangaben bezogen auf das Wurzelverzeichnis für Dokumente des Webservers.

Beispiel
<!--#flastmod file="index.htm" -->

#include

#include gibt den Inhalt der angegebenen Datei aus.

file

Verwenden Sie file für absolute Pfadangaben auf dem Server-Rechner …

virtual

… und virtual für relative Pfadangaben bezogen auf das Wurzelverzeichnis für Dokumente des Webservers.

Beispiel
<!--#include virtual="/news/news.htm" -->
Beachten Sie: Mit file können Sie nur Dateien angeben, die im selben Verzeichnis oder in Unterverzeichnissen liegen. Bei virtual gibt es diese Begrenzung nicht, da die Angabe auf eine beliebige (zugängliche) Adresse auf dem Server hinweisen kann.

Findet der Webserver eine SSI-Anweisung, die er ausführen kann, so wird anstelle dieser Anweisung der angeforderte Code in das HTML-Dokument eingebunden. Deshalb sollten Sie nur Dateien mit HTML-Schnipseln einbinden. Üblicherweise erhalten diese die Dateinamenserweiterung inc (für include). Solche inc-Dateien sollten reine Textdateien sein und dürfen beliebigen HTML-Code enthalten – je nachdem, an welcher Stelle einer HTML-Datei Sie den Codeschnipsel einbinden möchten.

Sinnvoll ist dies etwa, um beispielsweise eine für viele Seiten immer gleiche Navigation nur einmal zu erstellen und auch nur an einer Stelle zu pflegen.

Arbeiten mit Variablen

Achtung!

Die Unterstützung von SSI seitens der Hoster ist rückläufig.

Selbstverständlich können Sie anstelle von festgelegten Umgebungsvariablen wie SERVER_NAME oder DATE_LOCAL auch eigene Variablen definieren. Das Apache-Modul mod_include, das die Ausführung von SSI überhaupt erst ermöglicht, stellt dafür eine winzige Programmiersprache zur Verfügung. So können Sie beispielsweise mit <!--#set var="name" value="Wert" --> eine Variable definieren und ihr einen beliebigen Wert zuweisen. Es ist ebenfalls möglich, mit einfachen if/else-Festlegungen Bedingungen zu formulieren, die für das Ausführen bestimmter Server Side Includes zutreffen sollen.

Beispiel
<h1>Dynamisches HTML mit Server Side Includes</h1> <p>Diese Seite hat keine festgelegten Inhalte, sondern wird vom Server zusammengesetzt.<p> <!--#if expr="$QUERY_STRING = /test/" --> <!--#set var="param" value="Sie haben die Seite mit dem test-Parameter aufgerufen." --> <!--#echo var="param" --> <!--#else --> <!--#include virtual="test.inc" --> <!--#endif -->
In der ersten Anweisung fragen Sie ab, ob der aufgerufenen URL ein Parameter in der Form ?test mitgegeben wurde. Den Namen dieses Parameters müssen Sie innerhalb der SSI-Anweisung selbst in Slashes (Schrägstriche) einfassen, was ungefähr dem entspricht, was Sie von Perl als regulären Ausdruck kennen.

Nur wenn dies zutrifft, werden die anderen Anweisungen bis <!--#else --> befolgt. Das bedeutet, in der zweiten Anweisung wird die Variablen mit dem Name param festgelegt, die Variable erhält gleichzeitig die Zeichenkette „Sie haben die Seite mit dem test-Parameter aufgerufen.“ als Wert zugewiesen und in der dritten Anweisung wird der Wert der Variablen ausgegeben. Die Anweisung <!--#else --> legt fest, dass es eine Alternative geben soll, falls Sie die URL nicht mit einem zusätzlichen Parameter aufgerufen haben. Sie lautet: Binde an dieser Stelle den gesamten Inhalt der Datei test.inc ein.

Mit der letzten Zeile wird die if/else-Konstruktion beendet. Eine solche abschließende Zeile müssen Sie immer angeben.

Mit dem Einsatz von if/else-Abfragen und Variablen in SSI-Anweisungen können Sie die Erscheinungsweise Ihrer Webseite auf vielfältige Weise variieren. Beispielsweise können Sie von Übergabe-Parametern abhängig machen, ob bestimmte Links angezeigt oder ganze Textblöcke überhaupt in die Seite aufgenommen werden sollen. Sie können mehrere Parameter miteinander kombinieren und sich damit ein dynamisches Navigationsmenü zusammenstellen. Sie können den anzuzeigenden Inhalt komplett austauschen lassen usw.

Server Side Includes stellen keine Alternative zu dem dar, was Scriptsprachen wie Perl oder PHP an Möglichkeiten anbieten. Mit SSI können Sie bestehende Dateien nicht verändern, Sie können nichts speichern, nur in geringem Umfang Formulardaten berücksichtigen, keine Berechnungen ausführen lassen und vieles weitere. Aber für die "dynamische" Zusammenstellung von Seiteninhalten bieten SSI einige großartige Perspektiven an, und Sie müssen sich nicht erst mit den oftmals komplexen Programmiertechniken der „großen“ Scriptsprachen befassen.

Weblinks