| Aufrufen/Konfigurieren von Embperl |
| mod_perl Konfiguration | top |
Um HTML::Embperl als content handler unter mod_perl
laufen zu lassen, sind folgende Zeilen in der Apache Konfigurationsdatei httpd.conf nötig: Beipiel für Apache httpd.conf: SetEnv EMBPERL_DEBUG 2285
<Location /embperl/x>
SetHandler perl-script
PerlHandler HTML::Embperl
Options ExecCGI
</Location>Diese Konfiguration bewirkt, dass mod_perl Embperl für
alle Dateien, die im Unterverzeichnis, das mittels der URI <l>/embperl/x</l>
angesprochen wird, liegen, als content handler aufruft. Embperl
kann dann die Datei entsprechend bearbeiten und das Ergebnis zum Browser
schicken. Eine andere Möglichkeit ist, alle Dateien mit einer bestimmten Endung
von Embperl bearbeiten zu lassen. Eine Konfiguration dafür würde wie folgt
aussehen: SetEnv EMBPERL_DEBUG 2285
<Files *.epl>
SetHandler perl-script
PerlHandler HTML::Embperl
Options ExecCGI
</files>
AddType text/html .eplHINWEIS: Wenn mod_perl mit USE_DSO übersetzt ist, darf Embperl nicht
beim Starten des Server geladen werden!
| Andere Arten Embperl zu nutzen | top |
Embperl kann ebenso von der Befehlszeile aus aufgerufen werden oder
als normales CGI Skript ausgeführt werden. Weiterhin können
andere Perlprogramme oder -module es direkt aufrufen. Der Aufruf von der Befehlszeile sieht folgendermaßen aus (erste Zeile Unix, zweite Zeile Windows): embpexec.pl [-o outputfile] [-l logfile] [-d debugflags] htmlfile [query_string]
embpexec.bat [-o outputfile] [-l logfile] [-d debugflags] htmlfile [query_string]
| htmlfile | | | Datei welche von Embperl bearbeitet werden soll. |  | | query_string | | | Optional. Hat die selbe Bedeutung wie die Umgebungsvariable
QUERY_STRING eines CGI Skripts. QUERY_STRING beinhaltet alles
nach dem ersten "?" in der URL. query_string sollte URL kodiert sein.
Default ist kein query_string. |  | | -o outputfile | | | Optional. Gibt den Dateinamen an, in den das Ergebnis geschrieben wird.
Default ist die Standardausgabe. |  | | -l logfile | | | Optional. Name der Logdatei. Default ist /tmp/embperl.log. |  | | -d debugflags | | | Optional. Gibt an, welche Debuginformationen in die Logdatei
geschrieben werden. (siehe EMBPERL_DEBUG für mögliche Werte) |  |
Um Embperl als CGI Skript zu nutzen, müssen Sie die Datei
embpcgi.pl (bzw. embpcgi.bat unter Windows) in Ihr CGI
Verzeichnis kopieren (oft /cgi-bin). Zur Benutzung mit FastCGI
zusammen, verwenden Sie die Datei embpfastcgi.pl.
Zum Aufrufen verwenden Sie die URL http://www.domain.de/cgi-bin/embpcgi.pl/uri/ihres/embperl/dokuments Die extra Pfadinformationen die embpcgi.pl übergeben werden, geben
dabei den Ort des Embperl Dokuments an. Unter Apache kann embpcgi.pl auch als Handler definiert werden: <Directory /pfad/zu/ihren/embperl/dokumenten>
Action text/html /cgi-bin/embperl/embpcgi.pl
</Directory>HINWEIS 1 Die Datei embpexec.pl darf aus Sicherheitsgründen nicht mehr als
CGI Skript genutzt werden! HINWEIS 2: Um die Sicherheit von CGI Skripten sicher zustellen, empfiehlt es sich
mittels EMBPERL_ALLOW den Zugriff zu beschränken.
| Embperl aus Embperl Dokumenten oder anderen Perl Programmen/Modulen aufrufen | top |
Die Funktion Execute kann genutzt werden, um Embperl aus anderen
Perlmodulen oder -programmen aufzurufen. Ebenso ist es möglich andere
Dokumente (z.B. Kopf- oder Fußzeilen) in Embperlseiten einzufügen. Die Kurzform müssen lediglich Dateinamen und ggf. Parameter für das
aufzurufende Dokument als Argumente angegeben werden: Execute ($filename, @params) ; Die Langform erwartet eine Referenz auf einen Hash als Argument: Execute (\%params) ; Die Kurzform entspricht folgendem Aufruf in der Langform: Execute ({inputfile => $filename,
param => \@params}) ;Parameter für die Langform sind: | inputfile | | | Mittels inputfile wird die Datei angegeben, die
von Embperl bearbeitet werden soll. Ist der Parameter input
ebenso vorhanden, sollte inputfile einen eindeutigen Namen
spezifizieren. Jedesmal wenn Embperl den selben Namen sieht, geht es davon
aus, daß die Quelle die selbe ist und verwendet den selben Packagenamen,
sowie compiliert die Perlteile nur wenn mtime sich ändert oder
undefiniert ist. |  | | sub | | | Ruft die durch diesen Parameter angegebene Funktion auf (siehe auch [$ "sub" $]).
Momentan muß
die Funktion entweder in der selben Embperldatei definiert sein oder
die Embperldatei muß vorher importiert worden sein. |  | | input | | | Referenz auf einen Skalar, welcher den Quellentext enthält. inputfile
sollte ebenso angegeben werden, um die Quelle zu benennen. Der Name
kann dabei beliebiger Text sein. |  | | mtime | | | Zeitpunkt der letzten Änderung des Quellentextes. Der Quellentext
wird nur dann neu übersetzt, wenn sich mtime ändert oder wenn
mtime undef ist. |  | | outputfile | | | Datei, in die die Ausgabe geschrieben wird. Ist keine Datei angegeben,
wird die Standardausgabe benutzt. |  | | output | | | Referenz auf einen Skalar, in welchen die Ausgabe geschrieben werden soll. |  | | import | | | Ein Wert von Null veranlasst Embperl die Seite nicht auszuführen, sondern alle
darin enthaltenen Funktionen zu definieren. Dies ist nötig, um sie mittels des
sub Parameters der Execute Funktion aufrufen zu können oder als Vorbereitung
für einen späteren Import. Ein Wert von Eins veranlasst Embperl die Seite nicht auszuführen, sondern alle
darin enthaltenen Funktionen zu definieren und diese in das aktuelle Package zu importieren. Siehe auch [$ sub $] Metacommand. |  | | cleanup | | | Dieser Wert gibt an, ob and wann das "Cleanup" des Packages ausgeführt werden soll.
(Siehe auch Variablen Gültigkeitsbereich und Cleanup) | cleanup = -1 | | | Es wird kein Cleanup ausgeführt. |  | | cleanup = 0 oder nicht spezifiziert | | | Unter mod_perl wird das Cleanup erst ausgeführt, nachdem die Verbindung zum
Client beendet wurde, auch wenn Execute mehrfach während eines
Request aufgerufen wird. In allen anderen Fällen wird das Cleanup sofort ausgeführt. |  | | cleanup = 1 | | | Cleanup wird sofort ausgeführt. |  |
|  | | param | | | Eine Referenz auf ein Array, um dem aufgerufenen Dokument Parameter zu übergeben. Beispiel:
HTML::Embperl::Execute(..., param => [1, 2, 3]) ;
HTML::Embperl::Execute(..., param => \@parameters) ;ber das Array @param kann die aufgerufene Seite auf die Parameter zugreifen.
Siehe eg/x/Excute.pl aus der Embperl Distribution für ein detailliertes Beispiel. |  | | ffld and fdat | | | Kann benutzt werden, um die beiden Embperlvariablen @ffld und %fdat zu setzen. |  | | firstline | | | Gibt die erste Zeilennummer der Quellendatei an (Default: 1) |  | | options | | | Wie EMBPERL_OPTIONS (siehe unten), außer für Cleanup. HINWEIS: optDisableFormData sollte gesetzt werden, wenn die Formulardaten
eines POST Request bereits von der Standardeingabe eingelesen wurden, ansonsten
versucht Execute die Daten ein zweites Mal einzulesen, was dazu führt, das der Request
hängt. |  | | debug | | | Wie EMBPERL_DEBUG (siehe unten). |  | | escmode | | | Wie EMBPERL_ESCMODE (siehe unten). |  | | package | | | Wie EMBPERL_PACKAGE (siehe unten). |  | | virtlog | | | Wie EMBPERL_VIRTLOG (siehe unten). Wenn virtlog gleich uri ist, wird
die Embperl Logdatei gesendet. |  | | allow (ab 1.2b10) | | | Wie EMBPERL_ALLOW (siehe unten) |  | | path (ab 1.3b1) | | | Wie EMBPERL_PATH (siehe unten) |  | | uri | | | Die URI des Request. Wird nur für Virtlog Feature benötigt. |  | | compartment | | | Wie EMBPERL_COMPARTMENT (siehe unten). |  | | input_func | | | Wie EMBPERL_INPUT_FUNC (siehe unten).
Zusätzlich ist es möglich eine Codereferenz anzugeben, die entsprechende
Funktion wird dann als Eingabefunktion aufgerufen. Ebenso ist die Angabe
einer Arrayreferenz möglich, wobei das erste Element dann die Codereferenz
enthält und alle weiteren Elemente als Parameter der Funktion übergeben werden. |  | | output_func | | | Wie EMBPERL_OUTPUT_FUNC (siehe unten).
Zusätzlich ist es möglich eine Codereferenz anzugeben, die entsprechende
Funktion wird dann als Ausgabefunktion aufgerufen. Ebenso ist die Angabe
einer Arrayreferenz möglich, wobei das erste Element dann die Codereferenz
enthält und alle weiteren Elemente als Parameter der Funktion übergeben werden. |  | | cookie_name | | | Wie EMBPERL_COOKIE_NAME (siehe unten). |  | | cookie_path | | | Wie EMBPERL_COOKIE_PATH (siehe unten). |  | | cookie_domain | | | Wie EMBPERL_COOKIE_DOMAIN (siehe unten). |  | | cookie_expires | | | Wie EMBPERL_COOKIE_EXPIRES (siehe unten). |  | | errors | | | Erwartet eine Referenz auf ein Array. Nach der Rückkehr der Funktion enthält das Array
alle Fehlermeldungen der aufgerufenen Seite, soweit welche aufgetreten sind. |  | | object (ab 1.3.1b1) | | | Erwartet einen Dateinamen und liefert eine Hashreferenz zurück, die in das
Package der Datei "geblessed" ist, d.h. die Hashreferenze kann dazu genutzt
werden, um Funktionen die in der Datei definiert sind, also Methoden
aufzurufen. Zusätzlich kann durch den isa Parameter (siehe unten) eine
Vererbungshierachie zwischen Embperlseiten aufgebaut werden. Außerdem ist
es möglich in dem Hash Objektdaten zu speichern. Beispiel:
[# Die Datei eposubs.htm definiert zwei Funktionen: txt1 und txt2 #]
[# Als erstes erstellen wir ein neues Objekt #]
[- $subs = Execute ({'object' => 'eposubs.htm'}) -]
[# Nun kann man Methoden aufrufen #]
txt1: [+ $subs -> txt1 +] <br>
txt2: [+ $subs -> txt2 +] <br> |  | | isa (ab 1.3.1b1) | | | Erwarten den Namen einer Datei und schiebt den Packagename der Datei
auf das @ISA Array der aktuellen Seite. Dadurch wird es möglich eine
Vererbung zwischen Embperlseiten aufzubauen. Dies ist auch innerhalb
von EmbperlObject hilfreich. Beispiel:
[! Execute ({'isa' => '../eposubs.htm'}) !] |  | | syntax (ab 1.3.2) | | | In der Version 1.3.x wird lediglich der Wert 'Text' akzetiert, dieser
führt dazu, dass das Verhalten von Embperl 2.0 emuliert wird und
der Text lediglich durchgereicht wird und keine Verarbeitung
stattfindet. |  |
| Hilfsfunktionen für Execute | top |
| HTML::Embperl::Init ($Logfile, $DebugDefault) | | | Diese Funktion dient dazu, die Logdatei sowie
die Debugflags, die für die folgenden Aufrufe von Execute genutzt werden,
zu setzen. Es kann immer nur eine Logdatei existieren, der Pfad kann jedoch jederzeit
geändert werden. |  | | HTML::Embperl::ScanEnvironment (\%params) | | | Durchsucht alle Umgebungsvariablen (%ENV) und setzt %params für die Benutzung von Execute. Alle
Embperl Konfigurationsvariablen, außer EMBPERL_LOG, werden erkannt. |  |
| Beispiele für Execute: | top |
# Quellentext steht unter /pfad/zu/seite.html und
# das Ergebnis wird in /pfad/zu/ausgabe.html geschrieben
HTML::Embperl::Execute ({ inputfile => '/pfad/zu/seite.html',
outputfile => '/pfad/zu/ausgabe.html'}) ; # Quellentext steht in einem Skalar und das Ergebnis wird auf der
# Standardausgabe ausgegeben
# Vergessen Sie nicht, mtime zu ändern wenn $src sich ändert
$src = '<html><head><title>Seite [+ $no +]</title></head>' ;
HTML::Embperl::Execute ({ inputfile => 'irgendein name',
input => \$src,
mtime => 1 }) ;
# Quellentext steht in einem Skalar und das Ergebnis wird in
# einen zweiten Skalar geschrieben
my $src = '<html><head><title>Seite [+ $no +]</title></head>' ;
my $out ;
HTML::Embperl::Execute ({ inputfile => 'anderer name',
input => \$src,
mtime => 1,
output => \$out }) ;
print $out ; # Einfügen eines gemeinsammen Kopfes in eine Embperlseite
# der sich in /pfad/zu/kopf.html befindet
[- Execute ('/pfad/zu/kopf.html') -]
|
|