Title: Beispiele
Das Modul stdin
liest und in stdout schreibt, als Filter fungieren
(ein Filterbefehl im Unix-Stil). Dieser Filtermechanismus ist wesentlich
langsamer als ein Filter, der speziell für die Apache-API programmiert
wurde und der innerhalb des Serverprozesses ausgeführt wird und hat
folgende Vorteil:
- Das Programmiermodell ist wesentlich einfacher.
- Es kann jede Programmier- oder Skriptsprache benutzt werden, die zulässt, dass das Programm die Standardeingabe liest und in die Standardausgabe schreibt.
- Vorhandene Programm können ohne Änderungen als Apache-Filter benutzt werden.
Auch wenn die Leistungscharakteristika für den produktiven
Einsatz nicht genügen, kann das Modul
# HTML-Ausgabe von text/c-Dateien mit dem externen
# Programm /usr/bin/enscript erzeugen. Der Ausgabetyp
# ist text/html.
ExtFilterDefine c-to-html mode=output \
cmd="/usr/bin/enscript --color -W html -Ec -o - -"
<Directory "/export/home/trawick/apacheinst/htdocs/c">
SetOutputFilter c-to-html
# Die mod_mime-Direktive für den Typ .c
AddType text/c .c
# Die mod_ext_filter-Anweisung für den Debug-
# Level hoch genug für eine Nachricht über die Konfiguration
# pro Anfrage setzen
ExtFilterOptions DebugLevel=1
Hinweis: Das gzip-Beispiel dient lediglich
der Veranschaulichung. Eine sinnvolle Implementierung finden Sie
unter
ExtFilterDefine gzip mode=output cmd=/bin/gzip
<Location /gzipped>
# für die Ausgabe
SetOutputFilter gzip
# Die mod_header-Anweisung für das Header-Feld
# "Content-Encoding: gzip"
Header set Content-Encoding gzip
# der alles außer cat ausführt; cat verändert
# nichts, sondern führt nur zu längeren Pfaden
# und benötigt mehr Ressourcen.
ExtFilterDefine slowdown mode=output cmd=/bin/cat \
<Location />
# slowdown-Filters für die Ausgabe
#
SetOutputFilter slowdown;slowdown;slowdown
# der Text in der Antwort ersetzt.
#
ExtFilterDefine fixtext mode=output intype=text/html \
<Location />
# für die Ausgabe
SetOutputFilter fixtext
# für einen bestimmten Client (IP 192.168.1.31) überwachen,
# um Komprimierungsprobleme zu erkennen.
# Dieser Filter überwacht die Daten für mod_deflate.
ExtFilterDefine tracebefore \
EnableEnv=trace_this_client
# Dieser Filter überwacht, was an mod_deflate geht.
# Ohne den ftype-Parameter, würde der Filtertyp
# AP_FTYPE_RESOURCE
# *vor* den Filter mod_deflate gesetzt.
# Ein etwas höherer Wert als AP_FTYPE_CONTENT_SET
# sorgt dafür, dass er nach
# mod_deflate platziert wird.
ExtFilterDefine traceafter \
EnableEnv=trace_this_client ftype=21
<Directory /usr/local/docs>
SetOutputFilter tracebefore;deflate;traceafter
use strict;
open(SAVE, ">$ARGV[0]")
while (<STDIN>) {
print $_;
close(SAVE);
Die
Filtername ist die Bezeichnung des definierten
Filters. Dieser Name kann in SetOutputFilter-
Anweisungen benutzt werden. Alle registrierten Filter müssen eine eindeutige
Bezeichnung haben. Zur Zeit wird von der register-
Filter-API keine Fehlermeldung ausgegeben, so dass doppelt vergebene
Namen nicht zu erkennen sind.
Die weiteren Parameter können in beliebiger Reihenfolge stehen
und definieren den auszuführenden externen Befehl sowie
andere Merkmale. Nur der Parameter cmd= muss
angegeben werden:
cmd=cmdline- Mit dem Schlüsselwort
cmd=kann der auszuführende externe Befehl angegeben werden. Folgen auf Programmnamen Argumente, dann sollte die Befehlszeile in Anführungszeichen gesetzt werden (cmd="/bin/mypgm arg1 arg2"). Die normalen Shell-Anführungszeichen sind nicht erforderlich, da das Programm unter Umgehung der Shell direkt ausgeführt wird. Programmargumente werden durch Leerzeichen voneinander getrennt. Leerzeichen, die Bestandteil eines Arguments sind, werden mit einem Backslash gekennzeichnet. Ein Backslash, der Bestandteil eines Arguments ist, muss ebenfalls mit einem Backslash markiert werden. Zusätzlich zu den standardmäßigen CGI-Umgebungsvariablen werden die Variablen DOCUMENT_URI, DOCUMENT_PATH_INFO, und QUERY_STRING_UNESCAPED für das Programm gesetzt. mode=Modus- Als
Moduswird zur Zeitoutput(Voreinstellung) angegeben. Zukünftig wirdmode=inputgesetzt, um einen Filter für den Anfragenrumpf anzugeben. intype=imt- Dieser Parameter gibt den Internet-Medientyp an
(MIME-Typ) der zu filternden Dokumente an. Standardmäßig werden
alle Dokumente gefiltert. Wird
intype=angegeben, wird der Filter für Dokumente eines anderen Typs deaktiviert. outtype=imt- Dieser Parameter gibt den Internet-Medientyp (MIME-Typ) der gefilterten Dokumente an. Das ist sinnvoll, wenn der Filter den Internet-Medientyp während der Filteroperation ändert. Standardmäßig wird der Internet-Medientyp nicht geändert.
PreservesContentLength- Mit dem Schlüsselwort
PreservesContentLengthwird vorgeschrieben, dass der Filter die Datenlänge nicht verändern darf. Das ist nicht die Voreinstellung, denn die meisten Filter ändern den Datenumfang. ftype=Filtertyp- Dieser Parameter gibt den numerischen Wert für den Filtertyp an,
unter dem der Filter registeriert ist. Die Voreinstellung
AP_FTYPE_RESOURCEreicht meist aus. Muss der Filter an anderer Position in der Filterkette als Ressourcenfilter wirksam werden, dann ist dieser Parameter erforderlich. In der Dateiutil_filter.hunter denAP_FTYPE_foo- Definitionen finden Sie die entsprechenden Werte. disableenv=env- Dieser Parameter gibt die Umgebungsvariable an, die, falls sie gesetzt wurde, den Filter deaktiviert.
enableenv=env- Dieser Parameter gibt den Namen der Umgebungsvariable an, die gesetzt werden muss, wenn der Filter aktiviert werden soll.
Die
DebugLevel=n-
Mit dem Schlüsselwort
DebugLevelkann der Level für die vonmod_ext_filter erzeugten Fehlermeldungen angegeben werden. Standardmäßig werden keine Fehlermeldungen erzeugt, was der AngabeDebugLevel=0entspricht. Bei höheren Angaben werden Fehlermeldungen erzeugt und die Serverleistung herabgesetzt. Die Bedeutung der numerischen Werte wird bei den Definitionen derDBGLVL_-Konstanten am Anfang der Dateimod_ext_filter.cangegeben.Hinweis: Mit der zentralen Anweisung
LogLevel sollte dafür gesorgt werden, dass die Fehlermeldungen im Apache-Fehlerprotokoll gespeichert werden. LogStderr | NoLogStderr- Mit dem Schlüsselwort
LogStderrwird angegeben, dass die vom externen Filterprogramm nachstderrgeschrieben Fehlermeldungen im Apache-Fehlerprotokoll gespeichert werden.NoLogStderrdeaktiviert diesen Ablauf.
Die vom Filter in die Standardfehlerausgabe geschriebenen Meldungen
werden im Apache-Fehlerprotokoll gespeichert. Vom Modul
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
