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.
|