Perl - Formularauswertung mit CGI-LIBÜber die CGI-LIB wird die Auswertung von Formularen um einiges erleichtert. Das Beispiel des zweiten Teils des CGI-LIB Workshops zeigt, wie auf einfache Art, Dateien auf den Server hochgeladen werden können.

Über das CGI-LIB können Sie auch einen Dateiupload schnell ermöglichen. Damit können z.B. Besucher, bestimmte Dateien auf ihren Server oder ihren Webspace hochladen.

Das HTML Formular für das Perl Programm
Das HTML Formular für das Perl Programm

Dabei können User von ihrem Rechner Dateien auf den Server-Rechner hochladen.

Das HTML-Formular:

<form action="/cgi-bin/bsp2.pl" method=post
enctype="multipart/form-data">
<p>Schicken Sie mir eine Text- oder
HTML-Datei bis zu 1 KByte!<br>
<input type=file name="datei" size=30><br>
<input type=submit value="Absenden">
</p></form>

CGI Skript zur Ausgabe des Dateiinhaltes

Dieses CGI Skript gibt den Inhalt der Datei (nur) aus.

#!/usr/bin/perl
require "cgi-lib.pl";      # Version 2.17
$cgi_lib'maxdata = 10000;
ReadParse();
CgiDie('Sie haben keine Datei ausgewählt.',
   'Bitte den Backbutton klicken und die
Eingabe wiederholen.')
    if !$in{'Datei'};
print &PrintHeader;
print &HtmlTop("Der Inhalt der gesendeten Datei:");
print PrintVariables();
print &HtmlBot;

CGI Skript, das die Datei auf dem Server speichert


#!/usr/bin/perl
require "cgi-lib.pl";      # Version 2.17
$cgi_lib'maxdata = 100000;
$cgi_lib'writefiles = "/temp";
ReadParse();
CgiDie('Sie haben keine Datei ausgewählt.',
  'Bitte den Backbutton klicken und die Eingabe
wiederholen.')
   if !$in{'Datei'};
print &PrintHeader;
print &HtmlTop('Die Datei wurde hochgeladen');
print "Die gesendete Datei wurde wie
 folgt gespeichert: $in{Datei}.<br>\n";
print &HtmlBot;

Erläuterung:

Wichtig sind im Formlar diese Angaben im einleitenden Formtag: method="post" und enctype="multipart/form-data". Die Maximale Größe der Datei kann im Script festgelegt werden in der Zeile $cgi_lib'maxdata = 10000; (Anzahl Bytes, die maximal akzeptiert werden). Wird diese Größe überschritten, erfolgt eine Fehlermeldung. Das Beispiel zeigt auch eine Möglichkeit, wie die Funktion CgiDie() verwendet werden kann: Im Argument können dieser Funktion zwei Meldungen mitgegeben werden, die erste erscheint als H1-Überschrift und die zweite in normaler Schrift. Mit CgiDie() kann die weitere Scriptverarbeitung abgebrochen werden, wenn wie hier im Beispiel eine Eingabe nicht erfolgte. Das ist auch der Unterschied zur Funktion CgiError(), welche nur eine selbstdefinierte Fehlermeldung ausgibt, das weitere Ausführen des Scripts jedoch nicht unterbindet.

Wie kommt nun die Datei auf den Server?

Soll die Datei auf dem Server beispielsweise im Verzeichnis /temp gespeichert werden, erfordert das im Script eine weitere Zeile:
$cgi_lib'writefiles = "/temp";
Ist diese Zeile angegeben, wird die hochgeladene Datei in diesem Pfad gespeichert unter einem Namen, den cgi-lib.pl bestimmt (es ist dafür gesorgt, dass Dateinamen nicht mehrfach vergeben werden). Der Dateiname selbst steht sodann in der Variablen '$in {Datei} ' bereit, dessen Inhalt sich also geändert hat. Der Rest ist Tipparbeit ...

Zusammenfassung

Mit der Library cgi-lb.pl gibt deren Autor Steven E. Brenner dem Perl-Programmierer eine Bibliothek in die Hand, die den Schreibaufwand für Scripte mächtig verringert wenn es um die Verarbeitung von Forms geht. Das zeigen die Beispiele in eindrucksvoller Art und Weise.

Vielen dank an Herr Rolf Rost von I-NetLab, der uns den Artikel zur Verfügung gestellt hat. Bei Fragen können Sie sich an ihn wenden. Auf seiner Webseite finden Sie ein Kontakt-Formular.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: