Zur Website

Start Buchtipp Noch mehr Lösungen und Tricks Kontakt Copyright Impressum







Perl Modul:

Upload-Formular

Liest Formular-
Daten eines Upload-
formulares

Nr.24

©2004



Erläuterung:

Subroutine FORM_UPL_DECODE liest Formulardaten eines Uploadformulares mit multipart/form-data einschließlich der Daten der übertragenen Datei. gibt zusätzlich Request-String zurück.

Der Dateiupload wird während des Ladens auf die Maximalgröße hin kontrolliert und kann abgebrochen werden.

Beachte: Das Standard-Modul "CGI" wird benötigt.

In der beiliegenden Datei PL0007.pm ist die Programmierung als eigenes Perl-Modul ausgeführt, lauffähig sowohl unter Linux/Perl als auch Windows/Active Perl.

Subroutine:

sub FORM_UPL_DECODE
{
use CGI qw(:standard :OS);
my ($Max) = @_;
my ($System,$query,$key,%Felder,$RequestUrl);

if ($ENV{'OS'} eq "Windows_NT") {$System = '1';} else {$System = '0';}
$CGI::OS = 'WINDOWS' if ($System == 1);
if ($Max) {$CGI::POST_MAX=1024 * $Max}; # max nK posts

# z.B. http://www.domain.de/cgi-bin/boerse/Verzeichnis/mp.cgi
$RequestUrl = 'http://'.$ENV{'SERVER_NAME'}.$ENV{'SCRIPT_NAME'}.'?';

$query = new CGI;

# $query->param liefert Liste aller übergebener Schluesselwoerter

foreach $key ($query->param)
{
$Felder{$key} = $query->param($key);
}

return(\%Felder,$RequestUrl);
}

Aufruf:

1. Subroutine

($fiels,$RequestUrl) = &FORM_UPL_DECODE($max);

z.B.

$fields->{'Name'} # z.B. "Heinz"

Alle Variablen:

while (($key,$val) = each %{$fields})
{
# Tue etwas mit jedem Paar
}

Mit $err = cgi_error(); kann geprüft werden, ob Upload wegen Überschreitung der max. Dateigröße abgebrochen wurde.

Mit

if ($tmp_err =~ m/413/) # Zulässige Upload-kBytes überschritten
{
# Fehlermeldung für Upload-Form generieren
...
exit;
}

kann der Abbruch behandelt werden.

Die Subroutine muss im Programmtext gespeichert sein.

2. Modul

A:Speichern Sie das Modul in Ihrem Perlverzeichnis unter

/usr/bin/perl/lib/EIGEN/Form/PL0007.pm (Linux)

c:\Perl\lib\EIGEN\Form\PL0007.pm (Windows)

B: Fügen Sie in den Kopf Ihres Perl-Programmes folgende Zeile ein:

use EIGEN::Form::PL0007 qw(FORM_UPL_DECODE);

C: So rufen Sie die Subroutine auf:

($fields,$RequestUrl) = FORM_UPL_DECODE($max); # ohne "&" korrekt!

Die Subroutine muss nicht im Programmtext gespeichert sein.

3. Hinweis

$max - max. erlaubte kB Übertragung (1024 kB = 1MB !), z.B. 50 >> 50 kByte

$max kann auch weggelassen werden, dann erfolgt keine Volumenkontrolle des Uploads.