Thread erstellte Datei nach Download löschen (33 answers)
Opened by sirius at 2012-10-25 10:48

sirius
 2012-10-25 10:48
#162820 #162820
User since
2012-01-06
25 Artikel
BenutzerIn
[default_avatar]
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

View full thread erstellte Datei nach Download löschen