Julian Becker: header("Location: ....") und späterer Dateidownload

Hallo,

ich habe ein kleines Verzeichnis-Anzeige-Skript geschrieben, das beispielsweise auf http://link.man-ma.de/shots/hpublic/sega begutachtet werden kann.

Nun soll dieses zählen wie oft eine jede Datei geöffnet wird. Die Funktionsweise ist einfach:

statt die Datei xxx.jpg zu öffnen, wird die Datei ?dcnt=xxx.jpg geöffnet (dcnt=Download count). Dies bedeutet: nur der Anfangsbereich des Skriptes wird geparst und die Datei und die Datei wird via dem folgenden Code einfach geöffnet:

header("Location: ".$fileurl);

$fileurl könnte dann HTTP/1.1-gerecht http://localhost/m%C3%B6we.jpg lauten (bzw. statt m%C3%B6we.jpg auch möwe.jpg, is halt UTF8 ); in diesem Beispiel möchte ich ein Bild annehmen, da bei anderen Dateitypen der Fall nicht unbedingt eintreten muss:

Nun möchte ich ja nicht dem User verbieten, dass er sich dieses Bild auch nachträglich noch herunterlädt, dummerweise wenn er "Rechtsklick"-"Grafik speichern unter" durchführt (in Firefox, Opera und KOnqueror) wird ihm der Download-Dateiname localhost.htm (bzw. der Servername mit .htm) angeboten; IE bietet unbenannt.bmp an.. alles nicht so richtig!
 Bei "Datei" "Speichern unter" bietet zumindest Firefox den richtigen Dateinamen an (Opera/Konqueror untestet), aber auch hier schlägt IE den anderen Namen vor.

Wie kann ich bewirken, dass dem Browser der richtige Dateiname übergeben wird.

Danke,

Julian

  1. hi,

    also ich kann leider nur sagen das bei mir in allen browsern klappt...
    hoffe du hast die lösung schon.

    cu
    kai

  2. Hallo Julian,

    Wie kann ich bewirken, dass dem Browser der richtige Dateiname übergeben wird.

    Du könntest es mit einigen Headern versuchen. Ich habe z. B. auf dieser Seite ein Beispiel gesehen, das wie folgt aussieht:

      
    <?php  
    // Wir werden eine PDF Datei ausgeben  
    header('Content-type: application/pdf');  
      
    // Es wird downloaded.pdf benannt  
    header('Content-Disposition: attachment; filename="downloaded.pdf"');  
      
    // Die originale PDF Datei heißt original.pdf  
    readfile('original.pdf');  
    ?>
    

    Damit könnte es auch mit den Browsern funktionieren. Eventuell solltest du nach Codeänderung den Browsercache leeren und den Browser neu starten.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)