Indirekter Dateidwonload

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Indirekter Dateidwonload

    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:

    Quellcode

    1. $fh = fopen($file,"rb");
    2. if ( $fh === false )
    3. die("Download file missing or cant open File");
    4. $filesize = strlen(file_get_contents($file));
    5. header("Content-Type: application/octetstream");
    6. header("Content-Length: ".$filesize);
    7. header("Content-Disposition: attachment; filename=\"".$fileName."\"");
    8. header("Content-Transfer-Encoding: binary");
    9. header("Pragma: no-cache");
    10. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    11. rewind($fh);
    12. ob_start();
    13. fpassthru($fh);
    14. ob_end_flush();
    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..
    greetz,
    seitz
  • Ok, eh klar...
    Man sucht 3 Tage an der Lösung, findet nichts... Kaum schreibt man verzweifelter Weise einen Forenbeitrag findet man 20 Minuten später die Lösung ;)

    Quellcode

    1. $filesize = strlen(file_get_contents($file));
    2. header("Content-Type: application/octetstream");
    3. header("Content-Length: ".$filesize);
    4. header("Content-Disposition: attachment; filename=\"".$fileName."\"");
    5. header("Content-Transfer-Encoding: binary");
    6. header("Pragma: no-cache");
    7. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    8. $chunksize = 1 * (1024 * 1024);
    9. if ($filesize > $chunksize)
    10. {
    11. $handle = fopen($file, 'rb');
    12. $buffer = '';
    13. while (!feof($handle))
    14. {
    15. $buffer = fread($handle, $chunksize);
    16. echo $buffer;
    17. ob_flush();
    18. flush();
    19. }
    20. fclose($handle);
    21. }
    22. else
    23. {
    24. readfile($file);
    25. }
    Alles anzeigen
    greetz,
    seitz