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.
|