Embperl - building dynamic websites with Perl


Vordefinierte Variablen
[ << Prev: Gültigkeitsbereiche von Variablen und Cleanup ] [ Content ] [ Next: Session Handling (ab 1.2b2) >> ]

Embperl hat einige spezielle Variablen mit einer vorgegebenen Bedeutung.



%ENVtop

Enthält die selben Umgebungsvariablen, wie bei einem CGI Skript.



$epreqtop

Enthält eine Referenz auf das Embperl Request Object. Dies ist dasselbe wie wenn man $epreq = shift am Seitenanfang schreibt.



$epapptop

Enthält eine Referenz auf das Embperl Application Object. Dies ist dasselbe wie $epreq - app> zurückliefert.



%fdattop

Enthält alle Formulardaten, die an das Dokument gesendet wurden. Das NAME Attribute bildet den Schlüssel und das VALUE Attribute den Wert des Hashelements. Dabei ist es egal, ob die Daten mittels GET oder POST übetragen wurden. Existieren mehrere Werte mit dem selben Namen, werden diese mittels TAB getrennt. Diese können z.B. mittels folgenden Code in ein Array zerlegt werden:

  @array = split (/\t/, $fdat{'fieldname'}) ;

Embperl unterstützt ebenfalls den Kodierungstyp multipart/form-data, der für Dateiuploads benutzt wird. Das Element in %fdat enthält dann eine Dateihandle (entsprechend CGI.pm), die benutzt werden kann, um die Datei auszulesen.

Dateiupload Beispiel:

HTML Formular:

    <FORM METHOD="POST" ENCTYPE="multipart/form-data">
      <INPUT TYPE="FILE" NAME="ImageName">
    </FORM>

Embperl ACTION:

    [- if (defined $fdat{ImageName}) {
         open FILE, "> /tmp/file.$$";
	 print FILE $buffer
           while read($fdat{ImageName}, $buffer, 32768);
         close FILE;
       }
    -]
	
Wenn I<CGI.pm> 2.46 oder höher installiert ist, ist es weiterhin möglich den
Dateinamen (den B<lokalen> Dateinamen, wie er auf seiten des Browsers heißt)
und Informationen, die von der I<CGI.pm> Funktion C<uploadInfo> zur Verfügung 
gestellt werden, zu erhalten. Der Dateiname ist in dem entsprechenden
C<%fdat> Element direkt enthalten. Um auf die B<uploadInfos> zuzugreifen, muß man 
dem Feldnamen einen Bindestrich voranstellen:

Beispiel:

  # ImageName ist der NAME des Feldes. 
  # Er durch den im HTML Code angegeben ersetzt werden.
  Dateiname:     [+ $fdat{ImageName} +] <br>
  Content-Type:  [+ $fdat{-ImageName} -> {'Content-Type'} +] <br>

HINWEIS: Der Zugriff auf die Upload-Infos erfolgte vor 1.2b11 auf andere Art und Weise, die nicht mehr unterstützt wird.

HINWEIS: Dies funktioniert ebenfalls in die andere Richtung. Bei Inputtags deren Name einem %fdat Schlüssel entspricht und die kein Value Attribute haben wird automatisch der Wert aus %fdat als Value eingesetzt. Siehe HTML Tags INPUT/OPTION/TEXTAREA.



@ffldtop

Enthält alle Formularfeldnamen in der Reihenfolge, wie sie vom Browser geschickt wurden. Dies entspricht normalerweise der Reihenfolge, wie sie im Formular erscheinen.



%idattop

Enthält alle Werte von allen INPUT, TEXTAREA und SELECT/OPTION Tags, die in der Seite vorangehen.



%udat (ab 1.2b1)top

Sie können %udat benutzen, um Daten pro Benutzer zu speichern. Solange Sie nicht auf %udat zugreifen passiert gar nichts, sobald jedoch Daten in %udat geschrieben werden, erzeugt Embperl eine Session Id und sendet sie mittels eines Cookies zum Browser. Die Daten die in %udat abgelegt wurden, werden mittels Apache::Session gespeichert. Wenn der selbe Benutzer die nächste Embperl Seite aufruft, sendet der Browser den Cookie mit der Session Id zurück und Embperl stellt die Daten in %udat wieder her. (siehe auch Abschnitt über Session Handling)



%mdat (ab 1.2b2)top

%mdat speichert Daten je Seite. Solange Sie nicht auf %mdat zugreifen passiert gar nichts, sobald jedoch Daten in %mdat geschrieben werden, erzeugt Embperl eine Seiten Id und speichert die Daten mittels Apache::Session. Wenn ein Benutzer die selbe Embperl Seite aufruft, stellt Embperl die Daten in %mdat wieder her. (siehe auch Abschnitt über Session Handling)



$row, $coltop

Reihen und Spaltenzähler für dynamische Tabellen. (Siehe HTML Table Tag.)



$maxrow, $maxcoltop

Maximale Anzahl von Reihen oder Spalten einer dynamischen Tabelle. Diese Werte werden per default auf 100 für $maxrow und 10 für $maxcol gesetzt um Endlosschleifen zuverhindern. (Siehe HTML Table Tag.)



$cnttop

Enthält die Anzahl der Tabellenzellen, die bis jetzt angezeigt wurden. (Siehe HTML Table Tag.)



$tabmodetop

Entscheidet, wann das Tabellenende erreicht ist. Dynamische Tabellen werden immer durch $maxrow und $maxcol begrenzt. Zusätzlich können folgende Bedinungen für das Tabellenende festgelegt werden:

 

$tabmode = 1

 

Ende, wenn ein Block der $row enthält, undef als Ergebnis hat. Die Reihe, die den undefinierten Ausdruck enthält, wird nicht mehr angezeigt.

 

$tabmode = 2

 

Ende, wenn ein Block der $row enthält, undef als Ergebnis hat. Die Reihe, die den undefinierten Ausdruck enthält, wird angezeigt.

 

$tabmode = 4

 

Ende, wenn $maxrow Reihen angezeigt wurden.

Spaltenende:

 

$tabmode = 16

 

Ende, wenn ein Block der $col enthält, undef als Ergebnis hat. Die Spalte, die den undefinierten Ausdruck enthält, wird nicht mehr angezeigt.

 

$tabmode = 32

 

Ende, wenn ein Block der $col enthält, undef als Ergebnis hat. Die Spalte, die den undefinierten Ausdruck enthält, wird angezeigt.

 

$tabmode = 64

 

Ende, wenn $maxcol Spalten angezeigt wurden.

Der Defaultwert von 17 ist korrekt zum Anzeigen von Arrays. Es dürfte selten nötig sein diesen Wert zu ändern. Die Werte für Tabellen- und Spaltenende können addiert werden.



$escmodetop

Schaltet die HTML und URL Kodierung der Ausgabe ein und aus. Default ist ein ($escmode = 3).

Hinweis: Normalerweise kann die Kodierung durch Voranstellen eines Backslashes ('\') vor das entsprechende Zeichen verhindert werden. Das ist recht nützlich, ist aber in Situation, wo eine Benutzereingabe nochmal angezeigt wird, sehr gefährlich, da dies dem Benuter ermöglich beliebiges HTML einzugeben. Um dies zu verhindern muß zu den unten aufgeführten Werten jeweils eine 4 addiert werden. Dies führt dazu, dass Embperl den Backslash bei der Ausgabe nicht gesondert behandelt. (ab 1.3b4)

Hinweis 2:Um binäre Daten auszugeben muß escmode auf Null gesetzt werden (ab 1.3b6)

 

$escmode = 8 (oder 15) (2.0b4 und höher)

 

Das Resultat von Perlausdrücken wird immer XML Kodiert (z.B. '>' wird zu '&gt;' und ' zu &apos;).

 

$escmode = 3 (oder 7)

 

Das Resultat von Perlausdrücken wird HTML Kodiert (z.B. '>' wird zu '&gt;') und URL Kodiert ('&' wird zu '%26') innerhalb von A, EMBED, IMG, IFRAME, FRAME und LAYER Tags.

 

$escmode = 2 (oder 6)

 

Das Resultat von Perlausdrücken wird immer URL Kodiert ('&' wird zu '%26').

 

$escmode = 1 (oder 5)

 

Das Resultat von Perlausdrücken wird immer HTML Kodiert (z.B. '>' wird zu '&gt;').

 

$escmode = 0

 

Keine HTML oder URL Kodierung findet statt.



$req_rectop

Diese Variable ist nur vorhanden, wenn Embperl unter mod_perl läuft und enthält eine Referenz auf den Apache Request Record. Damit ist es möglich, alle Apache internen Funktionen zu nutzen. (siehe perldoc Apache für weitere Informationen)



LOGtop

Dies ist die Dateihandle der Embperl Logdatei. Durch schreiben auf diese Dateihandle ist es möglich, Zeilen in die Embperl Logdatei zu schreiben.

Beispiel: print LOG "[$$]ABCD: your text\n" ;

Wenn Sie ein Modul schreiben, das ebenfalls die Embperl Logdatei nutzen soll, können Sie folgendermaßen eine Dateihandle dafür bekommen:

    tie *LOG, 'Embperl::Log';


OUTtop

Diese Dateihandle ist an den Embperl Ausgabestrom gebunden. Ausgaben an diese Handle haben den selben Effekt wie ein [+ ... +] Block. (Siehe auch optRedirectStdout)



@paramtop

Wird durch den param Parameter der Execute Funktion gesetzt. Kann genutzt werden, um Parameter an ein Embperl Dokument zuübergeben oder zurückzugegben. (siehe Execute)



%http_headers_out (ab 1.2b10)top

Dieser Hash ermöglicht es HTTP Header anzugeben, die Embperl vor dem Dokument senden soll.

Ist ein "Location" Header angegeben, setzt Embperl den Status automatisch auf 301. Beispiel:

  [- $http_headers_out{'Location'} = "https://www.actevy.io/embperl/" -]

Wird ein Array als Location angeben, gibt das zweite Element den Status Code an:

  [- $http_headers_out{Location} = [ "https://www.actevy.io/embperl/", 303 ]; -]

Ab 1.3.2 können alle HTTP Header (außer "Content-Type") auch mehrere Werte erhalten. Um z.B. mehrere Cookie zu setzen, kann man folgendes schreiben:

  [- $http_headers_out{'Set-Cookie'} = 
      ['name=cook1;value=2;','name=cook2;value=b'] ; -]

Für "Location" und "Content-Type" wird nur der erste Wert berücksichtigt. Leere Arrays werden ignoriert. Z.B. führt Folgendes nicht zu einem Redirect:

  [- $http_headers_out{'Location'} = [] ; -]

siehe auch META HTTP-EQUIV= ...



$optXXX $dbgXXXtop

Alle Optionen (see EMBPERL_OPTIONS) und alle Debugflags (siehe EMBPERL_DEBUG) können durch entsprechende Variablen innerhalb der Seite gelesen und gesetzt werden. Beispiel:

    [- $optRawInput = 1 -]  # Anschalten von RawInput 
    [- $optRawInput = 0 -]  # Abschalten von RawInput 
    [+ $dbgCmd +]           # Ausgeben des Zustandes des dbgCmd Flags

Es gibt einige Ausnahmen, bei denen die Optionen lediglich gelesen werden können. Das Setzen solcher Optionen ist nur in den Konfigurationsdateien möglich. Folgende Optionen können nur gelesen werden:

 

$optDisableVarCleanup

 

$optSafeNamespace

 

$optOpcodeMask

 

$optDisableChdir

 

$optEarlyHttpHeader

 

$optDisableFormData

 

$optAllFormData

 

$optRedirectStdout

 

$optAllowZeroFilesize

 

$optKeepSrcInMemory



%CLEANUPtop

Embperl räumt nur Variablen auf, die innerhalb der Embperl Seite definiert wurden. Sollen weitere Variablen aufgeräumt werden, können diese dem Hash %CLEANUP, mit dem Variablennamen als Schlüssel und einem Wert von 1, hinzugefügt werden. Umgedreht ist es möglich das Aufräumen zu verhindern, wenn der Variablennamen mit einem Wert von 0 hinzugefügt wird.



%CLEANUPFILE (ab 1.2b6)top

Hat die selbe Aufgabe wie %CLEANUP, jedoch können hier Dateinamen hinzugefügt werden und alle Variable die in diesen Dateien definiert wurden, werden am jedes des entsprechenden Requests aufgeräumt.


[ << Prev: Gültigkeitsbereiche von Variablen und Cleanup ] [ Content ] [ Next: Session Handling (ab 1.2b2) >> ]


© 1997-2023 Gerald Richter / actevy