Felix: Download-Header

Hallo Forum,

ich möchte Dateien zum Download anbieten, die nicht direkt zugreifbar sind. Der Downloadlink geht auf ein Skript, das die Datei dann zum Runterladen ausgibt.

header("Content-Transfer-Encoding: none");
header("Content-type: application/x-download");
header("Content-Disposition: attachment; filename="test.dat";");
header("Accept-Ranges: bytes");
header("Content-length: 47894");

readfile("../../test.dat");

Wenn man im IE nun direkt auf den Link klickt, wird die Datei leider mit dem Namen des Skripts runtergeladen. Sind die gesendeten Header falsch oder fehlt das was?

Gruß,
Felix

  1. Hallo Felix.

    header("Content-length: 47894");

    Das brauchst du eigentlich nicht zu senden. Das macht PHP selbst.

    Wenn man im IE nun direkt auf den Link klickt, wird die Datei leider mit dem Namen des Skripts runtergeladen. Sind die gesendeten Header falsch oder fehlt das was?

    Überleg mal: Im Firefox geht es, im IE nicht.
    Du könntest auf den Namen der Datei verlinken (z.B. /download/test.dat) und das auf das obige Script rewriten (z.B. mit mod_rewrite, z.B. auf /download/downloadscript.php?file=test.dat).

    Viele Grüße aus Freiburg,
    Marian

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) n4:( ss:) de:] js:| ch:? mo:} zu:)
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
  2. Hallo Felix,

    header("Content-Transfer-Encoding: none");

    das Transfer-Encoding "none" gibt es nicht. (Es gilt RFC 2045 Abs. 6.1 bei Beachtung von RFC 2616 Abs. 19.4.5.)

    header("Content-type: application/x-download");

    Diese MIME-Type gibt es nicht. Woher kommt eigentlich der in letzter Zeit hier häufig gepostete Header?

    header("Content-Disposition: attachment; filename="test.dat";");

    Man beachte RFC 2616 Abs. 15.5:

    "...Content-Disposition is not part of the HTTP standard,..."

    D. h.: Es _darf_ funktionieren - es _muß_ aber nicht funktionieren.

    header("Accept-Ranges: bytes");

    Ich bezweile stark, daß Du eine Routine im Script geschrieben hast, das für den IE sehr häufig verwendete "Accept-Ranges" parst und folgerichtig verarbeitet.

    header("Content-length: 47894");

      
    /* Das sind die einzigen Header, die gebraucht werden: */  
    header('Content-Disposition: attachment; filename="test.dat"');  
    header('Content-Length: 47894');  
    
    

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.