################################################################################ ## Process Uploaded File ################################################################################ if(-d $session_dir){ # Das hatten wir oben schon. # my $query = new CGI; my $file_name = $cgi->param("filename"); $file_name =~ s/.*[:\/\\](.*)/$1/; # Den Doppelpunkt für die Macs my $upload_file_path = $upload_dir.$file_name; my $upload_filehandle = $cgi->upload("filename"); my $tmp_filename = "upl_".$$.$file_name; # TemporärDatei mit der PID # close($upload_filehandle); use Fcntl qw/:flock/; # Fcntl auf flock begrenzen, das spart speicher, weil das eine # ausgewachsene Bibliothek ist, die wir nicht in voller Größe # brauchen. # Maximum Uploadgröße 2MB (oder bei bedarf mehr). $CGI::POST_MAX = 1024 * 2048; open F, ">", $tmp_filename || &err_msg ( $upl_err."
$!" ); # Mein ErrorHandler flock F, LOCK_EX; # Datei sperren. binmode $tmp_filename; # Zur Sicherheit in den Binärmodus schalten. binmode F; while ( read $tmp_filename, my $buf, 1024 ) { print F $buf; } flock F, LOCK_UN; # Datei wieder freigeben. close F; # Und ganz wichtig: Den Inhalt der hochgeladenen Datei abprüfen. # Entsprechend den Vorgaben, was da hochgeladen werden darf. unless ( &chk_filecontent($tmp_filename) ) { exit; } else { use File::Copy; print "Moving File to Upload Directory -> "; if ( move ( $tmp_filename, $upload_file_path ) ) { print "Success
"; } else { print "Failure
"; } } # End unless chk_filecontent } # End if -d session_dir sub chk_fileconent { $file = shift || return; # Hier jetzt Pseudocode!!! return ($file eq "OK") ? 1 : 0; }