2008-12-29 20 views
119

In einer Webanwendung, an der ich gerade arbeite, kann der Benutzer auf einen Link zu einer CSV-Datei klicken. Es gibt keinen Header für den Mime-Typ, so dass der Browser es nur als Text darstellt. Ich würde für diese Datei wie als CSV-Datei gesendet werden, so dass der Benutzer kann es direkt mit Calc öffnen, Excel, Gnumeric, usw.Wie benutzt man den CSV MIME-Typ?

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

Dieser Code wie auf meinem Computer erwartet funktioniert (Ist das nicht wie geht das immer?), funktioniert aber nicht auf einem anderen Computer.

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

Gibt es irgendwelche Macken, die mir nicht bekannt sind?

Antwort

207

könnten Sie versuchen, den Browser zu zwingen, einen „Speichern unter ...“ zu öffnen Dialog durch so etwas wie tun:

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

, die über die meisten gängigen Browser funktionieren sollen.

10

Sie sind nicht die Sprache oder Rahmen, aber die folgenden Header verwendet für Datei-Downloads wird die Angabe:

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

Mit Internet Explorer haben Sie häufig die Pragma angeben: Neben öffentlich-Header für die Download-Funktion richtig ..

header('Pragma: public'); 

Just my 2 cents ..

+4

Pragma: öffentliche hat keine Bedeutung für Internet Explorer. (Ich habe an der fraglichen Komponente gearbeitet, und ich habe die Quelle getippt). – EricLaw

+0

Möglicherweise ist der tatsächliche Nutzen von diesem, einen vorher vorhandenen Pragma zu ersetzen: no-cache Vorsatz? – Doin

1

Dieser Code verwendet werden, können eine beliebige Datei zu 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 eine Warnung auslösen: Ressource wird als Dokument interpretiert, aber mit dem MIME-Typ application/octet-stream übertragen – mikeschuld