Startseite ]   [ Netz-Schule ]  [ Linux-Schule ]  [ Map ]

  Know How
  Glossar

   
  Netz-Schule Know How  

SSI - Server Side Includes

Eine Datei für das Menü und das auf allen Seiten? Jede Änderung sofort in allen Seiten zu sehen? Kein Thema, solche trivialen Aufgaben lassen sich nebenbei lösen ohne extra PHP [(Scriptsprache)] zu lernen und sich für x Hundert Mark professionelle Programme zu kaufen. Die Webserver der Hoster liefern entsprechende Mechanismen mit, man muss sie nur nutzen. Hier also eine Art Arbeitsblatt für die populäre Technik SSI.

Vorweg: Nicht alle Webserver unterstützen alle SSI Befehle. Ich beschreibe hier ausschliesslich die vom Apache-Server unterstützten Varianten. Da die meisten Hoster diesen Webserver verwenden, ist allerdings damit zu rechnen dass es bei Ihnen funktioniert. Sollte jemand die Befehle für den IIS [(Internet Information Server von Microsoft)], den PWS [(abgespeckter IIS, Personal WebServer)] oder Robin Hood [(Webserver für Mac OS)] kennen, baue ich diese gerne hier ein.

Voraussetzung: Der Admin muss SSI erlaubt haben. Das findet man recht schnell heraus. Man nimmt folgenden Code, speichert ihn in einer Datei amissi.shtml ab, spielt diese Datei auf seinen Webspace und ruft sie dann, wie jede andere Seite auch, über den Browser auf.

<html>
<head>
<title>Am I SSI?</title>
</head>
<body>
Es ist: <!--#echo var="DATE_LOCAL"--><br>
Die Datei heisst: <!--#echo var="DOCUMENT_NAME"--><br>
und Du benutzt: <!--#echo var="HTTP_USER_AGENT"-->
</body>
</html>

Wenn hinter den Doppelpunkten ein Datum, der Dateiname und der Browsername auftauchen - dann ist SSI bei Ihnen möglich. Sollte das nicht der Fall sein, kann man versuchen SSI über die Serversteuerungsdatei .htaccess selbst einzuschalten. Näheres zur .htaccess finden Sie ein Arbeitsblatt weiter vorne: .htaccess (includes). Geht es auch mit "Options Includes" nicht, ist die SSI Funktionalität abgeschaltet. Dann kann man hier aufhören zu lesen.

For those about to include oder Was kann ich mit SSI machen.

Mit Hilfe von SSI kann man immer wiederkehrende Teile des HTML Codes in eine Datei auslagern und diese in allen anderen Seiten einbinden. Schauen Sie sich diese Seite an (schick gell ;) ), Sie werden Elemente finden, die auf jeder Seite gleich sind:

  • Die Navigation am oberen Seitenrand mit der man die Hauptbereiche wechselt.
  • Die Navigationsleiste links, mit der man in den Bereichen arbeitet.
  • Den Grafiklink zur Site-Map rechts.
  • Das Seitenende mit der Linie und dem Copyrighthinweis.

Das alles sind immer wiederkehrende Elemente. Warum soll man sie auf jeder einzelnen Seite immer wieder einbauen? Man stelle sich nur vor, ich würde den Link "Diverses" in der linken Spalte in "Projekte" umbenennen. Soll ich jetzt durch 100 Seiten toben? Nie. Der entsprechende Teil des HTML Codes liegt in einer Datei namens "navleft.inc" und muss nur einmal geändert werden. Nach dem Übertragen der Seite auf die Homepage, steht die Änderung in allen Seiten zur Verfügung.

Man kann das soweit treiben wie ich es auch tue: Das gesamte Layout, incl. aller Menüs liegt in 5 Dateien. Nur der Mittelteil, die Stelle an der Sie gerade Lesen, ist noch in der eigentlichen Seite enthalten. So kann ich, ohne mich im geringsten um den Inhalt sorgen zu müssen, das gesamte Layout umbauen - und das in sehr kurzer Zeit.

Reicht noch nicht? Okay - Sie könnten auch CGI [(Common Gateway Interface, Standard zum einbinden von externen Programmen)] Scripte mit einer SSI Anweisung aufrufen. Wer allerdings derartige Spielereien vorhat, ist mit der Scriptsprache PHP sicher besser bedient. Aber für kleine Spielereien wie einen Seitenzähler hier und da reicht es allemal aus. Also hinreichend Gründe. Sicher kann man eine derartige Trennung von Layout und Kontent (Inhalt) auch mit Programmen wie Dreamweaver vornehmen (dafür zahlt man auch sattes Geld) oder die Verwaltung dieser Sachen Editoren wie Phase V machen lassen - nur muss man dann die Seiten manuell aktualisieren und alle auf den Server spielen - aber SSI bietet für den Einstieg ein prima Instrument. Letzter Vorteil: Das Arbeiten mit SSI bietet eine gute Übung wenn man tiefer in die Materie einsteigen will und auf PHP oder Perl umsteigt. Einziger Nachteil: Man sieht die Ausgaben nicht auf seiner Testumgebung zuhause, wenn man nicht den Webserver auch hier installiert hat.

SSI-Befehle für den Apache Webserver

in alphabetischer Reihenfolge.

Grundsätzlich die Syntax [Erklärung: Aufbau] einer SSI Anweisung:

<!--#befehl eigenschaft=wert eigenschaft=wert etc... -->(SSI)
< font size=+1 color=#ff0000 >(HTML)

Wie man sieht, ist der Aufbau eines SSI Befehls nahezu identisch mit dem einer HTML Anweisung. Bei SSI spricht man eben von 'Befehl', bei HTML von einem 'Tag'. Das sollte niemanden einschüchtern. Befehl klingt einfach besser, wenn sich Administratoren unterhalten. So easy.

Das ganze steht in Kommentarzeichen [Kommentarzeichen werden gesetzt um bestimmte
Zeichenfolgen nicht anzuzeigen], damit der Server die Befehle leichter erkennt. Es kann Probleme geben, wenn die Seite nach XHTML [XHTML, HTML Nachfolger] 1.x geschrieben und ein entsprechender DOCTYPE [Abk. für Dokumententyp, regelt die Darstellung im Browser] gesetzt ist! Browser die nach XML bzw. XHTML Standard parsen [(nach Anweisungen durchsuchen)], sind nicht mehr verpflichtet die Inhalte zwischen den Kommentarzeichen <!-- --> auszublenden. In der Praxis wird dies zwar nicht vorkommen, aber es ist theoretisch möglich. Daher sollte es Erwähnung finden.

config (Konfiguration)

Dieser Befehl legt das Format fest, in dem andere Befehle ihre Ausgaben liefern. Er hat, für sich alleine genommen keine Bedeutung. Setzt man ihn nicht ein, erfolgt die Ausgabe der Daten, welche von anderen SSI Befehlen geliefert werden, nach einem intern festgelegten Standard. Dieser ist von Server zu Server unterschiedlich.

sizefmt (sizeformat) - steuert die Anzeige für Dateigrößen. Hier kann man zwischen der Originalausgabe (Byte) und der kürzeren Ausgabe in Kilo oder MegaByte wälen.

<!--#config sizefmt="bytes"--> - Ausgabe: 798187 Bytes
<!--#config sizefmt="abbrev"--> - Ausgabe: 798 KBytes

timefmt (timeformat) - regelt die Ausgabe für Zeit und Datum. Standardmässig wird das lange Format benutzt, z.B. Friday, 28-Dec-2001 12:06:52 CET benutzt. Die Ausgabe zu regeln sieht komplizierter aus, als es ist. Hier sind die Variablen:

  • %a = Tag Abk. - mon
  • %A = Tag lang - Monday
  • %d = Tag Zahl - 04
  • %e = Tag Zahl - 4
  • %b = Monat Abk. - Apr
  • %B = Monat lang - April
  • %m = Monat Zahl - 08
  • %H = Uhrzeit 24 Std. - 13
  • %I = Uhrzeit 12 Std. - 01
  • %p = nur bei 12 Std. AM/PM
  • %M = Minuten
  • %S = Sekunden
  • %U = Kalenderwoche
  • %y = Jahr kurz - 01
  • %Y = Jahr lang - 2001
  • %Z = Zeitzone
<!--#config timefmt="%d.%m.%Y - %H:%M" --> 29.12.2001 - 08:22
<!--#config timefmt="%d.%m.%y - %H:%M" --> 29.12.01 - 08:22
<!--#config timefmt="%d.%B.%Y - %H:%M" --> 29.Dez.2001 - 08:22

echo - dient der Ausgabe von Systemvariablen, die der Server generell bereitstellt. Nützlich sind hier folgende:

  • DOCUMENT_NAME [(Name der aktuellen HTML Seite] - zur Übergabe an CGI.
  • DOCUMENT_URI [(URI = Uniform Ressource Identification, bezeichnet den Namen der aktuellen Seite incl. Domainnamen] - zur Übergabe an CGI.
  • LAST_MODIFIED [(Datum der letzten Änderung der Seite] - Aktualitätsanzeige
  • DATE_LOCAL - Datum und Zeit auf dem Server, Gimmick
  • HTTP_REFERER [Name der letzten Seite incl. Domainname] - für einen "zurück" Link
<!--#echo var="Variablenname" -->

So kann man z.B. die HTML Zeile:<a href="<!--#echo var="HTTP_REFERER" -->">zurück</a> prima für einen "zurück zur vorherigen Seite" Link verwenden.

Wer alle Variablen sehen möchte, die der Webserver zur weiteren Verarbeitung bereitstellt, bekommt eine Liste mit dem Befehl:

<!--#printenv -->

printenv steht für print enviroment und druckt die gesamte "Umgebung" aus, die für den Webserver relevant ist. Dazu gehören die Version des Servers, das Betriebssystem, der Browser welcher gerade Informationen abfragt und vieles mehr. Eine kommentierte Ausgabe findet man auf Seite 3 dieser Grundlagenseiten. Beispiele und Umgebungsvariablen

errmsg (errormessage) - Fehlermeldung wenn etwas nicht geht. Wer hier nichts eingibt, erhält die Standardfehlermeldung [an error occurred while processing this directive]

<!--#errmsg "Fehler auf Seite, hauen Sie den Webmaster --> (individuell)

exec (execute) - steht für 'ausführen'. Ausgeführt werden entweder Systembefehle oder Scripte [(selbstgebautes Programm)]. Dieser Befehl ist, dem Admin sei Dank, ziemlich oft gesperrt.

<!--#exec cmd="/user/bin/sendmail -v" --> - startet sendmail
<!--#exec cgi="/cgi-bin/formmail.pl" --> - startet formmail

flastmod (file_last_modification) - zeigt das Datum der letzten Aktualisierung der angegebenen Datei. Ebenfalls für einen Downloadbereich oder eine "Was ist neu" Seite zu benutzen.

<!--#flastmod virtual="/download/tidyGUI.exe" -->

fsize (filesize) - zeigt Dateigrössen. Praktisch zum Beispiel für einen Downloadbereich um dem User zu zeigen, wie lange er etwa auf den kompletten Download warten muss. Zeiten sind eigentlich unnötig. Der durchschnittliche User weiss ziemlich genau wie lange er mit seiner Hardware und seiner Leitung für ein MegaByte braucht.

<!--#fsize file="Dateiname"--> - lokale Dateien (./test.zip)
<!--#fsize virtual="Dateiname"--> - entfernte (http://... )

include - steht für 'einfügen'. Mit diesem Befehl kann man beliebige Dateien in die eigene Seite integrieren.

<!--#include file="/vorlagen/navigationoben.inc" -->
<!--#include virtual="../vorlagen/navigationoben.inc" -->

Der Unterschied zwischen file und virtual ist klein aber wichtig. Bei file kann man nur Pfade angeben, die relativ zu dem liegen, in dem die Seite liegt, aus dem der Befehl aufgerufen wird. Also nur Pfade die unterhalb (!) des aktuellen Verzeichnisses liegen. virtual kann Dateien von der gesamten Seite includen. Bsp:

  • Hauptverzeichnis
    • Webseiten (downloadliste.html)
      • Vorlagen 1 file / virtual
      • Vorlagen 2 file / virtual
    • Texte 1 NUR virtual

Das war es auch schon. Mit etwas Phantasie lassen sich die eigenen Seiten so schon etwas aufpeppen. Sei es eine Site-Map [(&¨bersicht aller Seiten der Homepage)], auf der User gleich sehen wie alt / neu etwas ist (sollte man nur tun wenn man gelgentlich neues einbaut), ein Downloadbereich mit Dateigrössen und einiges andere. Einfach probieren und Spass haben

vor »