arrowHome arrowSSI �bersicht arrowKalender arrowBildgalerie arrowForum

Server Side Includes

Übersicht: Einleitung - Zeitformate - Dateigröße formatieren - Benutzerdefinierte Fehlermeldungen - Dateien einbinden - Hide And Show - If und Endif - If, Endif und Environment Variablen - Set - Echo - Print Environment - Skript ausführen - Dateigröße - File Date

Beispiele: Bildergalerien

 

Vorwort

Dies ist eine Übersetzung des Server Side Includes Tutorials von Jan Weijers. Die Original Homepage findet sich unter http://www.weijers.net/guide/ssi.shtml. Unter http://www.weijers.net finden sich neben diesem Tutorial noch weitere interessante Infos rund um Webdesign.


Einleitung

Wie der Name schon sagt, weisen Server Side Includes (SSI) den Server an Informationen in ein HTML Dokument zu inkludieren, oder Informationen hinzuzufügen.
Die Syntax hat die Form:

<!--#befehl variablenname="wert"-->

Ob SSI auf dem Server verfügbar sind hängt vom Provider ab. Eine Nachfrage beim Support schafft hier Abhilfe. In den hier gezeigten Beispielen ist die Endung .shtml anzuhängen. Der Server ist Apache.

Leider funktionieren die hier aufgezeigten Beispiele nicht auf jedem Server. Z.B. sind die Befehle #hide und #show nur für WebStar verfügbar. Bei Apache schafft ein Konstrukt mit #if und #else Abhilfe.

Zeitformate

Vor dem Einsatz der Zeitformate muß noch einiges konfiguriert werden. Hier ein Beispiel wie das Datum ausgegeben werden kann. Das #echo Kommando wird später erläutert.

<!--#config timefmt="%A, %d %B %Y at %H:%M:%S"-->
<!--#echo var="date_gmt"-->

Tuesday, 08 October 2024 um 19:37:27

Eine Tabelle mit den gebräuchlichsten Formaten steht unterhalb. Die Ausgabe kann mit HTML formatiert oder um Text ergänzt werden. Die Elemente können "wild durcheinander" gemischt werden.

Element Ausgabe Beispiel
%a Abkürzung des Wochentages Sun
%A Wochentag Sunday
%b Monat (abk.) Jan
%B Monat January
%d Datum 1 (and not 01)
%H Uhrzeit (24h) 13
%I Uhrzeit (12h) 1
%j Tag des Jahres 360
%m Monat 11
%M Minuten 08
%p AM oder PM AM
%S Sekunden 09
%U Woche des Jahres(auch %W) 49
%w Tag der Woche 05
%y Jahr (JJ) 04
%Y Jahr (JJJJ) 1995
%Z Zeitzone EST

Weitere Beispiele:

<!--#config timefmt="Week %U of %y"-->
<!--#echo var="date_gmt"-->


Woche 40 im Jahr 24

<!--#config timefmt="%d/%m/%y, day %j of the year"-->
<!--#echo var="date_gmt"-->


08/10/24, Tag 282 des Jahres

<!--#config timefmt="%I:%S %p"-->
<!--#echo var="date_gmt"-->

07:27 PM

Es gilt immer die letztformatierte Version.

Dateigröße formatieren

Die Anzeige der Dateigröße kann spezifiziert werden.

<!--#config sizefmt="bytes"-->
<!--#fsize file="index.shtml"-->
<!--#config sizefmt="abbrev"-->
<!--#fsize file="index.shtml"-->

20,205
20K

Das #fsizewird später erklärt. Wie zu sehen gibt der Parameter "bytes" die Dateigröße in Bytes, der Parameter "abbrev" in Kilobytes an."

Benutzerdefinierte Fehlermeldungen

Die Standardfehlermeldung kann angepaßt werden. Hier das Beispiel einer selbst definierten Fehlermeldung mit anschließendem Aufruf der Datei "michgibtsdochgarnicht.html"

 

<!--#config errmsg="Hoppla da geht was schief. Mail an fehler@dizign.de"-->

<!--#include file="michgibtsdochgarnicht.html"-->

Hoppla da geht was schief. Mail an fehler@dizign.de

Es gibt nur eine Fehlermeldung. Jedoch kann man diese immer wieder neu definieren:

<!--#config errmsg="Hoppla da geht was schief. Mail an fehler@dizign.de"-->

<!--#include file="michgibtsdochgarnicht.html"-->

<!--#config errmsg="Noch ein Fehler. Doof! Mail an fehler@dizign.de"-->

<!--#include file="nixda.html"-->

Hoppla da geht was schief. Mail an fehler@dizign.de

Noch ein Fehler. Doof! Mail an mark@dizign.de

Selbstdefinierte Fehlermeldungen vereinfachen das Debuggen. Um mehrere Fehlermeldungen verwenden zu können, muß sicher gestellt sein, das sie "error message" definiert wurde bevor der Befehl auf den sie sich bezieht aufgerufen wird.

 

Dateien einbinden

Der include Befehl erlaubt die dynamische Einbindung "externer" Dateien in das aktuelle Dokument. So siehts aus:

<!--#include file="datei.shtml"-->

Die Pfade hängen vom provider ab. Es können keine Dateien in der Form http://etc. eingebunden werden. (Dann wären es ja auch keine SERVER Side Includes ;-) ). Sehr praktisch is die Einbindung wiederkehrender Elemente. Wie hier auf der Seite die Navigation, der Footer und die Google Anzeigen. So kann man alle Seiten die die entsprechenden Dateien inkludieren mit der Änderung nur einer Datei komplett verändern.
Ein Beispiel:

<p align="center">Dies ist die deutsche &Uuml;bersetzung von Jan's Guide to Web Authoring: Server Side Includes.<br> Das englische Original finden Sie unter <a href="http://www.weijers.net/guide/ssi.shtml">Jan's Guide: Server Side Includes</a></p>

Diese Datei wird als "footer.txt" gespeichert und dann so aufgerufen:

<!--#include file="footer.txt"-->

Dies ist die deutsche Übersetzung von Jan's Guide to Web Authoring: Server Side Includes.
Das englische Original finden Sie unter Jan's Guide: Server Side Includes

Es können sowohl NurText als auch HTML formatierte Dateien eingebunden werden.

Hide And Show

funktioniert nur mit dem Webstar Server. Mehr dazu unter http://www.weijers.net/guide/ssi.shtml#hide (English)

If und Endif

Da diese Seite mit einem Apache läuft funktionieren #show und #hide nicht. Aber mit dem Konstrukt #if und #endif können mit etwas Aufwand die selben Ergebnisse erzielt werden:

<!--#config timefmt="%A"-->
<!--#if expr="$date_gmt = Friday" -->
Yippie! Bald ist Wochenende
<!--#elif expr="($date_gmt = Saturday) || ($date_gmt = Sunday)" -->
Wochenende!
<!--#else -->
Schoener Tag heute!
<!--#endif -->

Noch ein Fehler. Doof! Mail an mark@dizign.de Yippie! Bald ist Wochenende

Bei #if und #endif müssen die beiden Ausdrücke verwendet werden. #elif und #else sind optional. Dieses Beispiel verwendet die Greenwhich Zeit #date_gmt (Sommerzeit wird ignoriert). Möglich wäre auch #date_local die vom Serverstandort abhängt.

Vergleichsoperatoren:

Operator Meaning
wert1 = wert2 wert1 ist gleich wert2
wert1 != wert2 wert1 ungleich wert2
wert1 < wert2 wert1kleiner als wert2
wert1 <= wert2 wert1 kleiner gleich wert2
wert1 > wert2 wert1 größer wert2
wert1 >= wert2 wert1 größer gleich wert2

If, Endif und Environment Variablen

Das #if Kommando kann verwendet werden um zum Beispiel eine Server basierte Browserweiche zu erzeugen. Jeder Browser meldet sich anders: Hier einige ältere Beispiele mit dem Betriebssystem MAC:

Mozilla/4.04 (Macintosh; I; PPC, Nav)
Mozilla/4.0 (compatible; MSIE 4.0; Mac_PowerPC)
Cyberdog/2.0 (Macintosh; PPC)

Der gerade verwendete Browser ist übrigens:
CCBot/2.0 (https://commoncrawl.org/faq/)
So können verschiedene Inhalte für verschiedene Browser angezeigt werden:

<!--#if expr="$HTTP_USER_AGENT=/MSIE/ " -->
Fight the Microsoft Monopoly. Get Mozilla!
<!--#elif expr="$HTTP_USER_AGENT=/Mozilla/ " -->
Welcome Mozilla user!
<!--#elif expr="$HTTP_USER_AGENT=/Cyberdog/ " -->
Welcome Apple Cyberdog user!
<!--#else -->
Welcome! So what browser are you using?
<!--#endif -->

Noch ein Fehler. Doof! Mail an mark@dizign.de Fight the Microsoft Monopoly. Get Mozilla!

Die beiden Schrägstriche /WERT/ bedeuten das der zweite Wert als regulärer Ausdruck behandelt wird. In diesem Fall wird untersucht ob der Wert in #http_user_agent enthalten ist.

Set

Mit #set include können Variablen erzeugt und Werte zugewiesen werden. Variablen können geprintet oder in #if "Schleifen" verwendet werden.

<!--#set var="fahrzeug" value="Mercedes" -->
<!--#echo var="fahrzeug" --><BR>
<!--#if expr="$fahrzeug = Mercedes" -->
Nettes Auto!
<!--#endif -->

Mercedes
Noch ein Fehler. Doof! Mail an mark@dizign.deNettes Auto!

Das $ Zeichen in der #if include Anweisung wird benötigt um zu gewährleisten, daß fahrzeug als Variable und nicht als Zeichenkette interpretiert wird.

Echo

Mit ECHO können Browser und Server Informationen (Umgebungs Variablen) ausgegeben werden.
Als da wären:

Document Name: <!--#echo var="document_name"-->
Document URI: <!--#echo var="document_uri"-->
Local Date: <!--#echo var="date_local"-->
GMT Date: <!--#echo var="date_gmt"-->
Last Modified: <!--#echo var="last_modified"-->
Server Software: <!--#echo var="server_software"-->
Server Name: <!--#echo var="server_name"-->
Server Protocol: <!--#echo var="server_protocol"-->
Server Port: <!--#echo var="server_port"-->
Gateway Interface: <!--#echo var="gateway_interface"-->
Request Method: <!--#echo var="request_method"-->
Script Name: <!--#echo var="script_name"-->
Remote Host: <!--#echo var="remote_host"-->
Remote Address: <!--#echo var="remote_addr"-->
Remote User: <!--#echo var="remote_user"-->
Content Type: <!--#echo var="content_type"-->
Content Length: <!--#echo var="content_length"-->
HTTP Accept: <!--#echo var="http_accept"-->
HTTP User Agent (Browser): <!--#echo var="http_user_agent"-->
HTTP Cookie: <!--#echo var="http_cookie"-->
Unescaped query string: <!--#echo var="query_string_unescaped"-->
Query String: <!--#echo var="query_string"-->
Path Info: <!--#echo var="path_info"-->
Path Translated: <!--#echo var="path_translated"-->
Referer: <!--#echo var="referer"-->
Forwarded: <!--#echo var="forwarded"-->

Document Name: index.shtml
Document URI: /index.shtml
Local Date: Tuesday
GMT Date: Tuesday
Last Modified: Tuesday
Server Software: Apache
Server Name: ssi.dizign.de
Server Protocol: HTTP/2.0
Server Port: 443
Gateway Interface: CGI/1.1
Request Method: GET
Script Name: /index.shtml
Remote Host: (none)
Remote Address: 44.220.251.236
Remote User: (none)
Content Type: (none)
Content Length: (none)
HTTP Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP User Agent (Browser): CCBot/2.0 (https://commoncrawl.org/faq/)
HTTP Cookie: (none)
Unescaped query string: (none)
Query String:
Path Info: (none)
Path Translated: (none)
Referer: (none)
Forwarded: (none)

Nicht alle Befehle liefern Werte. Dies ist abhängig von Server, Browser und der Art des Seitenaufrufs.

Print Environment

Um alle Umgebungsvariablen auszugeben muß man nicht die ganzen #echo includes aufrufen. Statt dessen funktioniert das ganze mit:

<pre> <!--#printenv --> </pre>


Die environment include enthält auch die zuvor definierte Variable "fahrzeug" aus dem vorangegangen Beispiel.

Skripte ausführen

Mit SSI können auch Skripte aufgerufen werden.
Zu sehen unter anderem beim englischen Original: http://www.weijers.net/index.shtml
oder auch im Forum. Der Forumsaufruf funktioniert wie folgt:

<!--#exec cgi="../cgi-bin/forum.cgi"-->

File Size

Die Dateigröße kann so eingefügt werden:

<!--#fsize file="index.shtml"-->

20K

Dies ist die Größe dieser Datei. Wie unter Dateigröße formatieren eklärt, kann die Größe sowohl in Bytes als auch abgekürzt als KByte oder MByte ausgegeben werden.

File Date

Der Zeitpunkt der letzten Änderung kann wie folgt angegeben werden:

<!--#flastmod file="index.shtml"-->

Letzte Änderung am: Tuesday, 11 July 2023 at 20:50:30

Die Datumsformatierung siehe oben.

Mehr von Jan Weijers (in Englisch)