Wie verwende ich den CSV MIME-Typ?


125

In einer Webanwendung, an der ich arbeite, kann der Benutzer auf einen Link zu einer CSV-Datei klicken. Für den MIME-Typ ist kein Header festgelegt, daher rendert der Browser ihn nur als Text. Ich möchte, dass diese Datei als CSV-Datei gesendet wird, damit der Benutzer sie direkt mit calc, excel, gnumeric usw. öffnen kann.

header('Content-Type: text/csv');
echo "cell 1, cell 2";

Dieser Code funktioniert wie erwartet auf meinem Computer (ist das nicht immer so?), Funktioniert aber nicht auf einem anderen Computer.

Mein Browser ist ein nächtlicher Build von FF 3.0.1 (unter Linux). Die Browser, in denen es nicht funktionierte, waren IE 7 und FF 3.0 (unter Windows)

Gibt es irgendwelche Macken, die ich nicht kenne?

Antworten:


219

Sie können versuchen, den Browser zu zwingen, ein Dialogfeld "Speichern unter ..." zu öffnen, indem Sie Folgendes tun:

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
echo "cell 1, cell 2";

Welches sollte in den meisten gängigen Browsern funktionieren.


12

Sie geben keine Sprache oder kein Framework an, aber der folgende Header wird zum Herunterladen von Dateien verwendet:

"Content-Disposition: attachment; filename=abc.csv"

5

In Internet Explorer müssen Sie häufig auch den öffentlichen Header Pragma: public angeben, damit der Download ordnungsgemäß funktioniert.

header('Pragma: public');

Nur meine 2 Cent ..


5
Pragma: public hat für Internet Explorer keinerlei Bedeutung. (Ich habe an der fraglichen Komponente gearbeitet und die Quelle erfasst).
EricLaw

Möglicherweise besteht der eigentliche Nutzen davon darin, einen bereits vorhandenen Pragma-No-Cache-Header zu ersetzen?
Doin

2

Mit diesem Code können Sie jede Datei exportieren, einschließlich CSV

// application/octet-stream tells the browser not to try to interpret the file
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($data));
header('Content-Disposition: attachment; filename="export.csv"');

2
"octetstream" soll "octet-stream" sein
EricLaw

2
Dies kann in einigen Browsern zu einer Warnung führen: Ressource als Dokument interpretiert, aber mit Anwendung / Oktett-Stream vom Typ MIME übertragen
mikeschuld
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.