Thread erstellte Datei nach Download löschen
(33 answers)
Opened by sirius at 2012-10-25 10:48
Hi Ihr,
Ich habe mir ein Script geschrieben, welches mir einen Datenbankauszug (per mysqldump + gzip) on the fly erstellt und zum Client herunterlädt. Der Datenbankauszug wird dabei auf dem Server in einer Datei gespeichert. Nach dem Download soll die erstellte Datei wieder gelöscht werden. Problem: Wenn die Datei recht groß ist (was bei mir mit etwa 400MB der Fall ist) dauert der Download ja ein Weilchen. Dabei wird der Anwender (zumindest im IE und bei Firefox) überlicherweise vom Browser gefragt, ob er die Datei öffnen oder wohin er die Speichern möchte. Wenn der Anwender allerdings "Abbrechen" in diesem Dialog anklickt bevor der Download beendet ist (deswegen geht dieser Fehler nur mit großen Dateien), wird die erstellte Datei nicht mehr gelöscht. Ich habe mal ein Beispielscript erstellt: 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 #!/usr/bin/perl use strict; # Datei on the fly erstellen (hier allerdings ohne mysqldump) open(my $file, ">backup.txt"); for (my $i=1;$i<10000000;$i++) { print $file "Hello World\r\n"; } close($file); # Datei zum Download anbieten print qq(Content-Type: text/plain\n); print qq(Content-Disposition: attachment; filename="backup.txt"\n\n); open(my $file, "<backup.txt"); binmode($file); while (read($file,my $bytes,1024)) { print $bytes; } close($file); unlink('backup.txt'); Wenn ihr das ausprobiert und in dem Download-dialog des Browsers ganz schnell "Abbrechen" klickt, wird die Datei backup.txt nicht gelöscht. Wie kann ich erreichen, dass die Datei backup.txt in jedem Fall gelöscht wird? ---------------------- WebServer: Apache/2.2.16 (Debian) mod_gnutls/0.5.6 PHP/5.3.3-7+squeeze3 with Suhosin-Patch $]: 5.010001 |