header("Location: ....") und späterer Dateidownload
Julian Becker
- php
0 kai0 Marc Reichelt
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
hi,
also ich kann leider nur sagen das bei mir in allen browsern klappt...
hoffe du hast die lösung schon.
cu
kai
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/