Thread Dateiupload: Keine leeren Dateien zulassen (4 answers)
Opened by MechaTikal at 2007-11-01 10:05

MechaTikal
 2007-11-01 11:36
#101637 #101637
User since
2007-10-10
20 Artikel
BenutzerIn
[default_avatar]
moritz+2007-11-01 09:49:00--
Spricht etwas dagegen, leere Dateien nach dem hochladen einfach sofort zu löschen?

Und was genau ist dir an $CGI::POST_MAX unklar?

Dagegen spricht in der Theorie nichts, aber man muss erst mal auf die Idee kommen. :-)
Allerdings benutze ich eine laufende Nummer, falls zwei gleichnamige Dateien hochgeladen werden, und irgendwie will das Skript die nicht runterschmeissen...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
sub upload_file {
        my ($hashref) = @_;
        my $file;
        my $name;
        my $buffer;
        my $savefile;
        my %filehash = %$hashref;
        my $uploaddir = "/home/Michaela/public_html/uploadfiles/";
        my $success_count = 0;
        my @empty_files = ();
        my @uploaded_files = ();
        
        while (($name, $file) = each (%filehash)) {
                
                $name =~ s/\W|\s//gi; #Sonderzeichen rauswerfen
                $savefile = $uploaddir . $name;
                
                open(OUTFILE, ">$savefile.$$") or print "Error: Can't create file $savefile: $!";
                binmode $savefile;
                while(read($file, $buffer, 1024)) {
                        print OUTFILE $buffer;
                }
                close(OUTFILE);
                
                check_filesize($savefile.$$);
                
                $success_count++;
                push(@uploaded_files, $file);
        }
        if (@empty_files) {
                $message2 = "Nicht hochgeladen: @empty_files";
        }
        if ($error) {
                $message = $q->strong($error);
        } elsif (!$error) {
                $message = "$success_count Datei(en) erfolgreich hochgeladen: @uploaded_files";
        }

}
#########################################################
sub check_filesize {
        my ($file_to_check) = @_;

        my $filesize = 0;
        my @file_info;
        my $filesize;
        
        @file_info = stat($file_to_check);
        $filesize = $file_info[7];
        if ($filesize == 0) {
                chdir("/home/Michaela/public_html/uploadfiles/"); #braucht man das überhaupt?
                unlink($file_to_check) or print "Could not delete $file_to_check: $!";
        } else {
        
        }
}


Bringt aber bei mir den Fehler
"Could not delete /home/Michaela/public_html/uploadfiles/DBDOrac119targz5165: No such file or directory".

$CGI::POST_MAX habe ich jetzt verstanden: Es wird solange gesendet, bis die maximale Größe erreicht wird, dann bricht der Upload ab - richtig?
Dann müsste man doch theoretisch erkennen können, wenn keine Bytes ankommen - dann ist die Datei ja leer und der Upload könnte abbrechen. Oder ist das eine Milchmädchenrechnung?

View full thread Dateiupload: Keine leeren Dateien zulassen