Ursprünglich als Werkzeug zur Verarbeitung und Manipulation von Textdateien insbesondere bei System- und Netzwerkadministration vorgesehen (zum Beispiel Auswertung von Logdateien), hat Perl auch bei der Entwicklung von Webanwendungen weite Verbreitung gefunden.
In diesem Tutorial werden folgende Lernziele erreicht:
- Einführung in die CGI-Skriptsprache
- Ein Formular gestalten, welches unsere Daten versenden kann
- Ein Skript schreiben, welches die Informationen sammelt und dann ein Feedback gibt.
CGI Skripte
Das sogenannte UNIX PATH zur cgi-bin directory ist abhängig vom Server abhängig. Oft wird sieht der absolute Pfad so aus:
/home/sites/www.site.com/web/cgi-bin/skript.cgi
Das Skript kann mit diesem HTTP Befehl aufgerufen werden:
http://www.yourdomain.com/cgi-bin/skript.cgi
Ist PERL installiert?
Wenn Sie eine Telnet Verbindung haben, dann können Sie mit dem UNIX Befehl:
which perl
herausfinden, wo genau der Interpreter aufgerufen werden sollte. Oft sieht es so aus:
/usr/bin/perl.
Die sogenannte Extension (Endung) sollte .cgi oder .pl sein.
Ein Formular erstellen
Der erste Teil unseres Projektes soll ein einfaches Formular werden, mit HTML programmiert. Dies erlaubt Ihnen, dass Skript zu Testzwecken aufzurufen. WICHTIG! Bitte achten Sie darauf, nichts im Formular zu ändern. Der Quellencode ist in der unteren Grafik richtig. Um Ihr Leben leicht zu machen, kopieren Sie den Quellcode und fügen Sie ihn in die HTML-Seite ein. Stellen Sie die HTML Seite ins Verzeichnis, wohin Sie normalerweise Ihre Webseiten stellen.
Der dazugehörige HTML Quellcode:
<HTML>
<BODY>
<FORM METHOD=”POST” ACTION=”/cgi-bin/skript.cgi”>
<PRE>
Vorname <INPUT TYPE=”text” NAME=”vname” MAXLENGTH=15 SIZE=15>
Familienname<INPUT TYPE=”text” NAME=”fname” MAXLENGTH=20 SIZE=20>
E-Mail <INPUT TYPE=”text” NAME=”email” MAXLENGTH=35 SIZE=35> <INPUT TYPE=”submit” VALUE=”Info versenden!”>
<INPUT TYPE=”reset” value=” Zurücksetzen”> </PRE> </FORM> </BODY>
</HTML>
Das Skript sollte zuerst die eingegebenen Informationen sammeln und dann sollte ein Feedback kommen (z.B Vielen Dank).
Wenn die Taste ‚Info versenden !’ gedrückt wird, wird das Skript /cgi-bin/skript.cgi auf dem Server gestartet. Das Skript bekommt die Daten, die im Formular eingegeben wurden.
Nehmen wir jetzt an, dass der User bei Vorname Franz, bei Familienname Muster und bei der Email Adresse franz@muster.de eintippt.
So sollten die Daten in einen String übermittelt werden, der so aussieht:
Skript.cgi?vname=Franz&fname=Muster&email=franz@muster.de
Diese Daten werden von unserem Browser zu dem Server weitergeleitet. Diese Daten sind so nicht brauchbar, deshalb muss man die Daten ‚dekodieren’. Es gibt schon ‚Subroutinen’, die für dieses Problem entwickelt wurden.
Die Subroutine heisst get_form oder get_values und wird prinzipiell nie geändert. Grundsätzlich muss man diese Routine in alle Programme kopieren.
Feedback ausgeben:
Um ein Feedback auszugeben, muss das CGI-Skript HTML Code ausgeben! Um ein Skript zu realisieren, können Sie einfach ein Text Editor öffnen, und folgendes eintippen:
#!/usr/bin/perl
print “Content-type: text/html\n\n”;
print qq~
<html><h1>Guten Tag!</h1></html>
~;
Die erste und zweite Linie sind obligatorisch (und immer gleich).
Das Skript soll mit der Endung .cgi oder .pl gespeichert werden und auf dem Server mit dem ASCII mode per FTP auf das /cgi-bin/ Verzeichnis raufladen.
Um das Skript aufzurufen, tippen Sie:
http://www.ihreseite.de/cgi-bin/skript.cgiMit diesem Skript wird ‚Guten Tag’ auf dem Bildschirm erscheinen.
Feedback dynamisch ausdrücken
Nehmen wir an, möchten wir folgendes mit dem Skript ausdrücken; Die Email Adresse von Franz Muster lautet franz@muster.ch Der Skript sollte Franz Muster und franz@muster.ch aus dem Formular herauslesen.
#!/usr/bin/perl
print “Content-type: text/html\n\n”;
&get_values();
#Zuweisung von $form an lokale Variablen
$vname=$form{vname};
$fname=$form{fname};
$email=$form{email};
print qq~
<html><h1>
Die email Adresse von $vname $fname lautet $email
</h1></html>
~;
Die Daten werden in der Variable $form, durch die Routine get_values, gespeichert. Mit $form{feld} können Sie den Wert eines Formularfeldes herauslesen. Feld hängt vom Formular ab (Feldname). Die Daten werden dekodiert und werden an $vname, $fname und $email zugewiesen. Mit dem Symbol # kann man Kommentare in das CGI-Skript einfügen, um die Lesbarkeit zu erhöhen.
Wenn alles richtig programmiert wurde, dann sollte das Programm folgendes ausgeben: den Vornamen, den Familiennamen und die Email Adresse.
(Die Email Adresse von Franz Muster lautet franz@muster.ch)
Das Programm finden Sie hier:
#!/usr/bin/perl
print “Content-type: text/html\n\n”;
&get_values();
# Die Routine speichert die Werte in $form{Feldname}
# Wir speichern die Daten in Variablen, die für die Ausgabe
# benutzt werden.
$vname=$form{vname};
$fname=$form{fname};
$email=$form{email};
print qq~
<html><h1>
Die email Adresse von $vname $fname lautet $email
</h1></html>
~;
# Routine, um die gesendete Daten zu dekodieren
sub get_values {
if ($ENV{ ‘REQUEST_METHOD’ } eq ‘POST’ ) {
read(STDIN, $buffer, $ENV{ ‘CONTENT_LENGTH’ });
} else {
$buffer = $ENV{ ‘QUERY_STRING’ };
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack( “C” , hex($ 1 ))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack( “C” , hex($ 1 ))/eg;
$form{$name} = $value;
}
}
Leave a Reply