Thread erstellte Datei nach Download löschen
(33 answers)
Opened by sirius at 2012-10-25 10:48
Danke für die Anregungen.
Auf die Idee den Rückgabewert von print $bytes zu prüfen bin ich nicht gekommen, der funktioniert sehr schön. Ich habe allerdings gleich mal alle Vorschläge getestet (will ja auch lernen). Der Code sah dann so aus: 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 57 58 59 #!/usr/bin/perl use strict; $SIG{PIPE}=\&remove; # test PIPE signal open(my $file, ">backup.txt"); for (my $i=1;$i<10000000;$i++) { print $file "Hello World\r\n"; } close($file); my $filedestruct=new SQLDump('backup.txt'); # test destruction object print qq(Content-Type: text/plain\n); print qq(Content-Disposition: attachment; filename="backup.txt"\n\n); open(my $file, "<backup.txt"); binmode($file); eval { # test eval while (read($file,my $bytes,1024)) { print $bytes or die 'STDOUT closed'; } 1; } or do { &remove("eval $@"); }; close($file); &remove('normal'); # simple remove file before normal end of script # -------------------------- sub remove { &log; my $filename='backup.txt'; if (-e $filename) {unlink($filename);} } sub log { open(my $file, ">>log.txt"); print $file time.": @_\n"; close($file); } # ============================== package SQLDump; sub new { my $self={filename=>$_[1]}; bless $self; return $self; } sub DESTROY { my $self=shift; my $filename=$$self{filename}; &main::remove('destroy'); } Wir Ihr seht, steht in der log.txt dann drin, was passiert ist. Wenn man den Download vorzeitig abbricht steht da (auch in dieser Reihenfolge): Wenn der Download durchläuft: Die SIG{INT} Variante kommt nie. Das mit dem Destructor funktioniert leider auch nicht. Ein interessanter Aspekt ist noch, wenn ich den eval-Block nicht selbst mit "die" verlasse, dann bekomme ich in der log.txt ganz viele PIPE-Signals auf einmal, und sonst nichts. Falls noch jemand weitere Anregungen hat, dann sind diese herzlich wollkommen. Ansonsten werde ich jetzt einen eval-Block drumrumbasteln. Man da hätte ich auch selber drauf kommen können. |