Erzwingen, dass eine Datei mit PHP heruntergeladen wird
Lesezeit: 5 Minuten
Elitmiar
Ich habe eine CSV-Datei auf meinem Server. Wenn ein Benutzer auf einen Link klickt, sollte er heruntergeladen werden, aber stattdessen öffnet er sich in meinem Browserfenster.
Mein Code sieht wie folgt aus
<a href="https://stackoverflow.com/questions/1465573/files/csv/example/example.csv">
Click here to download an example of the "CSV" file
</a>
Es ist ein normaler Webserver, auf dem ich meine gesamte Entwicklungsarbeit habe.
Ich habe so etwas versucht:
<a href="https://stackoverflow.com/questions/1465573/files/csv/example/csv.php">
Click here to download an example of the "CSV" file
</a>
Warum ändern Sie nicht einfach die Content-Type-Zeile in Content-Type: application/octet-stream ? Es scheint ein bisschen überflüssig, dies in einer .htaccess-Datei zu tun, wenn Sie es sowieso überschreiben.
– Machtherr
22. Oktober 2009 um 21:07 Uhr
Das war die anfängliche Antwort auf die Frage, die Frage änderte sich dann, also war der zweite Teil die Antwort darauf.
– robjmills
28. Oktober 2009 um 8:34 Uhr
Dies funktioniert nicht in allen Browsern mit allen Dateitypen. Zum Beispiel funktioniert es nicht auf der neuesten (August 2013) Version von Chrome mit PDF-Dateien und vielleicht auch CSV-Dateien. In meiner Antwort erfahren Sie, wie Sie dies zuverlässiger zum Laufen bringen können.
– Chris Harrison
5. August 2013 um 14:09 Uhr
Gute Antwort! Ich würde vorschlagen zu wechseln 'Content-Type: application/csv' zu 'Content-Type: application/octet-stream' wie von @Powerlord vorgeschlagen. Es wird eine abgerundetere Antwort sein und anderen helfen, die nicht nur daran interessiert sind, ihre CSVs herunterzuladen. Nur ein Vorschlag! Danke!
– Govind Rai
25. September 2016 um 6:39 Uhr
Können Sie mir bitte sagen, wie, wenn es eine zip Datei??
– Prifulnath
23. Februar 2017 um 8:54 Uhr
AtanuCSE
Oder Sie können dies mit HTML5 tun. Einfach mit
<a href="https://stackoverflow.com/questions/1465573/example.csv" download>download not open it</a>
Das Beste am Hinzufügen herunterladen Attribut ist, dass es das Herunterladen jeder Art von Datei erzwingt.
– Faizan Noor
4. Februar 2017 um 18:53 Uhr
Es wird endlich in Safari unterstützt!
– Chuck Le Butt
3. April 2017 um 10:13 Uhr
Ich liebe das. Hat mir eine weitere Nacht erspart, in der ich versucht habe, herauszufinden, wie ich mit diesen verdammten PHP-Download-Headern arbeiten soll.
– Wenzel
30. April 2019 um 19:48 Uhr
Michael Borgwart
Dies kann nicht zuverlässig durchgeführt werden, da der Browser entscheiden muss, was mit einer URL geschehen soll, die er abrufen soll.
Du kannst empfehlen an den Browser, dass er sofort anbieten soll, “auf der Festplatte zu speichern”, indem er einen Content-Disposition-Header sendet:
header("Content-disposition: attachment");
Ich bin mir nicht sicher, wie gut dies von verschiedenen Browsern unterstützt wird. Die Alternative besteht darin, einen Anwendungs-/Oktett-Stream vom Inhaltstyp zu senden, aber das ist ein Hack (Sie sagen dem Browser im Grunde “Ich sage Ihnen nicht, um welche Art von Datei es sich handelt” und je nachdem, ob die meisten Browser bieten dann einen Download-Dialog an) und verursacht angeblich Probleme mit dem Internet Explorer.
Bearbeiten Sie haben bereits auf eine PHP-Datei umgestellt, um die Daten zu liefern – was notwendig ist, um den Content-Disposition-Header zu setzen (es sei denn, es gibt einige obskure Apache-Einstellungen, die dies ebenfalls können). Jetzt muss diese PHP-Datei nur noch den Inhalt der CSV-Datei lesen und drucken – die filename=example.csv im Header schlägt dem Client-Browser nur vor, welchen Namen er für die Datei verwenden soll, er ruft die Daten nicht tatsächlich aus der Datei auf dem Server ab.
Die Verwendung von “Content-Disposition: Attachment” hat bei uns in allen FF-Versionen, IE6 und IE7, durchgehend funktioniert.
– Steve Claridge
23. September 2009 um 12:31 Uhr
Normalerweise werden Sie nur dann auf Probleme mit der Inhaltsdisposition stoßen, wenn Sie eine Standardaktion für heruntergeladene Dateien eines für Ihren Browser festgelegten Typs haben, andernfalls folgen Browser normalerweise der Empfehlung (für modernere Versionen ymmv mit alten/veralteten Browserversionen). .
Konfigurieren Sie Ihren Server so, dass er die Datei mit dem Medientyp sendet application/octet-stream.
Peter Mortensen
Das bedeutet, dass Ihr Browser diesen Dateityp verarbeiten kann.
Wenn Sie es nicht mögen, wäre die einfachste Methode, ZIP-Dateien anzubieten. Jeder kann mit ZIP-Dateien umgehen und sie können standardmäßig heruntergeladen werden.
Ich würde einfach readfile() aus den Dokumenten verwenden If you just want to dump the contents of a file to the output buffer, without first modifying it or seeking to a particular offset, you may want to use the readfile(), which saves you the fopen() call.
– David Scherer
21. November 2018 um 17:31 Uhr
9882600cookie-checkErzwingen, dass eine Datei mit PHP heruntergeladen wirdyes
Und wie bezieht sich das alles auf PHP?
– Pavillon
23. September 2009 um 12:14 Uhr
Sie haben vergessen, den Inhalt der Datei auszugeben.
– Gumbo
23. September 2009 um 12:42 Uhr
habe meine Antwort unten mit einer Lösung für Ihr neues Problem aktualisiert
– robjmills
23. September 2009 um 12:43 Uhr
geht das auch ohne php?
– Benutzer2935354
24. April 2014 um 9:46 Uhr
Eine weitere gute Antwort finden Sie hier: stackoverflow.com/questions/10934022/…
– Vaidas
13. Juni 2014 um 14:56 Uhr