herberlin.de tools.herberlin.de tools.herberlin.de

BremsServer Serverside Includes (SSI).

Bresserver ab Version 1.2 unterstützt auch Serverside Includes (SSI). SSI bieten eine einfache Möglichkeit, Webseiten ein wenig dynamisch zu gestalten.
Die vorliegende Implementierung ist vollständig in Java, Sie benötigen keine externen Tools. Alle Seiten mit den Endungen .shtm und shtml durch den SSI-Parser geschickt. Dies lässt sich nicht abschalten; allerdings passiert auch nichts, wenn keine SSI-Tags vorhanden sind.
Die Implementierung folgt im mit einigen Einschränkungen der des Apache Webservers.

Die Seite zeigt Einzelheiten zur SSI-Implementierung von Bermsserver. Nähre Informationen zu SSI finden Sie:

Apache Dokumentation Apache HowTo



Servervariablen

Dies sind die Standard Servervariablen:
Ausgabe mit zum Beispiel:  <!--#echo var="DATE_LOCAL" -->

    DATE_LOCAL      02.05.2002 00:50:32
DATE_GMT 01.05.2002 22:50:32
DOCUMENT_NAME ssi1.shtml
DOCUMENT_URI http://localhost/BremsServer/ssi/ssi1.shtml
LAST_MODIFIED 01.05.2002 22:46:18


printenv

<!--#printenv--> gibt die verfügbaren Umgebungsvariablen aus. Sie werden vom Server gesetzt oder von der Webseite übergeben:
  
REQUEST_METHOD GET TEMP D:\Projekte\BremsServer\classes\tmp SERVER_NAME localhost sizefmt bytes GATEWAY_INTERFACE CGI/1.1 REMOTE_ADDR 127.0.0.1 DATE_GMT 01.05.2002 22:50:32 SERVER_PROTOCOL HTTP/1.1 HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; [..]) PATH_INFO /Projekte/BremsServer/ssi/ssi1.shtml DOCUMENT_ROOT D:\ SERVER_PORT 80 CONTENT_TYPE application/octet-stream DOCUMENT_NAME ssi1.shtml DOCUMENT_URI http://localhost/Projekte/BremsServer/ssi/ssi1.shtml DATE_LOCAL 02.05.2002 00:50:32 errmsg [Error processing SSI.] SCRIPT_NAME /Projekte/BremsServer/ssi/ssi1.shtml LAST_MODIFIED 01.05.2002 22:46:18 TMP D:\Projekte\BremsServer\BremsServer\classes\tmp PATH_TRANSLATED D:\Projekte\BremsServer\ssi\ssi1.shtml

include

Include fügt Dateien ein. Dabei unterscheidet man "virtual" und "file":

Virtual:

Die Datei wird ausgeführt, wenn der Dateityp als Extension bekannt ist. Php wir mit dem Parameter "-f" ausgeführt, um die Ausgabe von HTTP Headern zu unterdrücken.

Beispiel: <!--#include virtual="inc/example.php"-->

Hello from PHP

File:

Die Datei wird niemals ausgeführt, sondern unverändert eingefügt:.
<!--#include file="inc/example.php"-->

<?
print "Hello from PHP";
?>


Angaben zu Dateien

fsize

fsize gibt die Dateigrösse an.
Beispiel <!--#fsize virtual="inc/example.php"-->

69 bytes
    

flastmod

gibt das letzte Änderungsdatum der Datei zurück.

Beispiel: <!--#flastmod virtual="inc/example.php"-->

    06.04.2002 16:55:38


config

Config ermöglicht in bescheidenem Umfang die Konfiguration einiger Servermeldungen. Gesetzt werden können:

errmsg

Die ist die Standarderrormessage:

[Error processing SSI.]
D:\Projekte\BremsServer\ssi\nix.pl (Die angegebene Datei
wurde nicht gefunden)


Hier wird sie geändert:
<!--#config errmsg="Ich bin ein dummer Fehler."-->

Und wir provozieren nocheimal den Fehler:

Ich bin ein dummer Fehler.
D:\Projekte\BremsServer\ssi\nix.pl (Die angegebene Datei
wurde nicht gefunden)

timefmt

Mit fimefmt kann das Datum und Zeitformat geändert werden.
Beispiel <!--#config timefmt="%A %B %d, %Y"-->
Datum vorher:

    02.05.2002 00:50:32

Datum nachher:

    Donnerstag Mai 02, 2002 12:50:32 Zentraleuropäische
Sommerzeit

oder GMT:

    Wednesday May 01, 2002 10:50:32 Greenwich Mean Time

Einige Infos zu den Formatzeichen:

  • "%a Abbreviated weekday name: %a",
  • "%A Full weekday name: %A",
  • "%b Abbreviated month name: %b",
  • "%B Full month name: %B",
  • "%c Date and time: %c",
  • "%d Two-digit day of month (01 - 31): %d",
  • "%H Hour of the day, 24 hour day: %H",
  • "%I Two-digit hour, 12 hour day (01 - 12): %I",
  • "%j Three-digit day of year (001 - 366): %j",
  • "%m Two-digit month as a decimal number (1 - 12): %m",
  • "%M 2-digit minute (00 - 59): %M", "%p AM or PM: %p",
  • "%S Two-digit second (00 - 59): %S",
  • "%U Two-digit week number where Sunday is the first day of the week (00 - 53): %U",
  • "%w Weekday where 0 is Sunday (0 - 6):
  • %w (Bad implementation).",
  • "%W Two-digit week number where Monday is the first day of the week (00 - 53): %W (Bad implementation).",
  • "%x Date: %x",
  • "%X Time: %X",
  • "%y Two-digit year without century (00 to 99): %y",
  • "%Y Year with century: %Y",
  • "%z Time zone name, or no characters if no time zone: %z",
  • "%Z Time zone name, or no characters if no time zone: %Z"

sizefmt

sizefmt legt fest, ob die Dateigrösse in kb oder byte angegeben wird. Voreinstellung ist bytes, möglich ist auch abbrev
<!--#fsize virtual="ssi1.shtml" -->

6211 bytes

Beispiel: <!--#config sizefmt="abbrev"-->

<!--#fsize virtual="ssi1.shtml" -->

6.0 kb

exec

exec führt ein Kommando auf der Betriebssystemebene aus. Falls das unter Win32 nicht funktioniert, setzen Sie die Eigenschaften der DOS Box in: Beim beenden schliessen. Gehen Sie dazu mit der rechten Maustaste auf das DOS Icon oder öffnen Sie eine DOS Box und wählen im Systemmenu Eigenschaften, wählen Sie das Register Programm und klicken Sie: "Beim beenden schliessen" an. Nicht alle DOS Programme eignen sich zur Ausführung mit exec, "dir" funktioniert beispielsweise nicht.
<!--#exec cmd="java -version"-->

java version "1.4.0"
Java(TM) 2 Runtime Environment, [..]
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)

Neben exec cmd gibt es noch exec cgi.
Apache empfiehlt, exec cgi nicht und statt dessen include virtual zu verwenden. BremsServer führt exec cgi wie include virtual aus.
Es wird zur Zeit kein default cgi-bin Verzeichnis unterstützt, sodass Sie ggf.
<!--#exec cgi="/cgi-bin/script.pl"--> schreiben müssen.


set

set ermöglicht das Setzen von Variablen, die dann mit echo ausgegeben werden können:
<!--#set var="n" value="ich bin N!"-->:
<!--#echo var="$n"-->: ich bin N!
<!--#echo var="n"-->: ich bin N!

<!--#set var="nn" value="$n oder nicht?"-->:
<!--#echo var="nn"-->: ich bin N! oder nicht!

Nicht gesetzte Variablen werden ignoriert:
<!--#set var="nn" value="Leider gibt es $a nicht."-->:
Leider gibt es $a nicht.


if

Mit if können bedingte Anweisungen ausgeführt werden:

<!--#if expr="drei = 0" -->
ist drei
<!--#elseif expr="0 == 0" -->
Null ist ok
<!--#else -->
kommt wohl nichts bei raus
<!--#endif -->

Null ist ok

Einschränkungen bei der SSI-Unterstützung:

In folgenden Punkten weicht Bremsserver von der Apache Implementierung ab, bzw. ist nicht korrekt implementiert:

Ssi Tags müssen in derselben Zeile beginnen und aufhören; sie dürfen sich nicht über mehrere Zeilen ersterecken.

config timefmt:
%w soll die Nummer eines Wochentags in der Woche (Beispiel 1 für Montag) zurückgeben, gibt aber die Bezeichnung des Tages in Kurzform zurück (Beispiel Mo für Montag),
%W sollte die Nummer eine Woche im Jahr mit Wochenbeginn Montag zurückgeben, zeigt aber Nummer einer Woche im Jahr mit Wochenbeginn Sonntag (wie %U).
config errmsg
Der Text der Fehlermeldung kann konfiguriert werden, allerdings wird zusätzlich immer noch die Meldung des SSI Parsers angezeigt. (Dies ist kein Bug, sonder ein Feature, denn schliesslich handelt es sich um einen Testserver).
[echo] encoding
encoding wird nicht unterstützt.
exec cgi
exec cgi wird wie include virtual ausgeführt, da der BremsServer kein default - cgi bin kennt. Sie können /cgi-bin/ als Alias einrichten, dann sollte es wie gewünscht funktionieren. Im übrigen empfiehlt Apache, exec cgi aus Sicherheitsgründen nicht und statt dessen include virtual zu verwenden.


http://tools.herberlin.de/bremsserver/ssi.shtml
Last Modified: 2010-03-26
© 2004 Hans Joachim Herbertz