Hallo zusammen,
ich stehe vor dem Problem, eine Datei indirekt herunterzuladen. "indirekt" heißt, dass der Benutzer in keinem Fall die URL der Datei sieht.
Aktuell kann ich die Datei zwar herunterladen mit (lt. Browser) der richtigen Dategröße von ca. 40MB aber auf der Platte hat die Datei dann 0 Bytes und ich kann sie logischerweise nicht öffnen.
Also ich habe einen Link zu einer Datei. Anschließend berechne ich für die HEADER die Dateigröße (die Berechnungt stimmt...). Dann sende ich die HEADER (vorher keine Ausgabe..) und anschließend buffere ich meine Datei.
Damit das ganze nicht gecached wird habe ich als verfallsdatum noch ein Datum in der Vergangenheit genommen.
Und hier das ganze in Code:
Alles anzeigen
Hat irgendjemand eine Ahnung wieso das nicht geht?
Statt den Download mit fpassthru zu realisieren habe ich auch readfile oder fread benutzt. Habe auch anstatt der Angabe des FileHandles direkt den Link zur Datei benutzt... Beides geht nicht..
ich stehe vor dem Problem, eine Datei indirekt herunterzuladen. "indirekt" heißt, dass der Benutzer in keinem Fall die URL der Datei sieht.
Aktuell kann ich die Datei zwar herunterladen mit (lt. Browser) der richtigen Dategröße von ca. 40MB aber auf der Platte hat die Datei dann 0 Bytes und ich kann sie logischerweise nicht öffnen.
Also ich habe einen Link zu einer Datei. Anschließend berechne ich für die HEADER die Dateigröße (die Berechnungt stimmt...). Dann sende ich die HEADER (vorher keine Ausgabe..) und anschließend buffere ich meine Datei.
Damit das ganze nicht gecached wird habe ich als verfallsdatum noch ein Datum in der Vergangenheit genommen.
Und hier das ganze in Code:
Quellcode
- $fh = fopen($file,"rb");
- if ( $fh === false )
- die("Download file missing or cant open File");
- $filesize = strlen(file_get_contents($file));
- header("Content-Type: application/octetstream");
- header("Content-Length: ".$filesize);
- header("Content-Disposition: attachment; filename=\"".$fileName."\"");
- header("Content-Transfer-Encoding: binary");
- header("Pragma: no-cache");
- header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
- rewind($fh);
- ob_start();
- fpassthru($fh);
- ob_end_flush();
Hat irgendjemand eine Ahnung wieso das nicht geht?
Statt den Download mit fpassthru zu realisieren habe ich auch readfile oder fread benutzt. Habe auch anstatt der Angabe des FileHandles direkt den Link zur Datei benutzt... Beides geht nicht..
greetz,
seitz
seitz