Comment utiliser le type MIME CSV?


125

Dans une application Web sur laquelle je travaille, l'utilisateur peut cliquer sur un lien vers un fichier CSV. Il n'y a pas d'en-tête défini pour le type mime, donc le navigateur le restitue simplement sous forme de texte. Je souhaite que ce fichier soit envoyé sous forme de fichier .csv, afin que l'utilisateur puisse l'ouvrir directement avec calc, excel, gnumeric, etc.

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

Ce code fonctionne comme prévu sur mon ordinateur (n'est-ce pas toujours comme ça?) Mais ne fonctionne pas sur un autre ordinateur.

Mon navigateur est une version nocturne de FF 3.0.1 (sous Linux). Les navigateurs avec lesquels il ne fonctionnait pas étaient IE 7 et FF 3.0 (sous Windows)

Y a-t-il des bizarreries dont je ne suis pas conscient?

Réponses:


219

Vous pouvez essayer de forcer le navigateur à ouvrir une boîte de dialogue "Enregistrer sous ..." en faisant quelque chose comme:

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

Ce qui devrait fonctionner sur la plupart des principaux navigateurs.


12

Vous ne spécifiez pas de langue ou de cadre, mais l'en-tête suivant est utilisé pour les téléchargements de fichiers:

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

5

Avec Internet Explorer, vous devez souvent spécifier l'en-tête Pragma: public pour que le téléchargement fonctionne correctement.

header('Pragma: public');

Juste mes 2 cents ...


5
Pragma: public n'a aucun sens pour Internet Explorer. (J'ai travaillé sur le composant en question, et j'ai salué la source).
EricLaw

Peut-être que l'utilité réelle de ceci est de remplacer un Pragma préexistant: no-cache header?
Fait le

2

Ce code peut être utilisé pour exporter n'importe quel fichier, y compris 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" est censé être "octet-stream"
EricLaw

2
Cela peut provoquer un avertissement dans certains navigateurs: Ressource interprétée comme Document mais transférée avec application de type MIME / octet-stream
mikeschuld
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.