82 votes

Comment utiliser le type MIME CSV ?

Dans une application web sur laquelle je travaille, l'utilisateur peut cliquer sur un lien vers un fichier CSV. Aucun en-tête n'est défini pour le type de message, de sorte que le navigateur le rend simplement sous forme de texte. J'aimerais 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 dans lesquels il ne fonctionne pas sont IE 7 et FF 3.0 (sous Windows).

Y a-t-il des particularités dont je ne suis pas au courant ?

153voto

Sean Bright Points 39480

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.

10voto

gimel Points 30150

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

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

4voto

4levels Points 1073

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

header('Pragma: public');

Juste mes 2 centimes

2voto

Yuri Korolov Points 92

Ce code peut être utilisé pour exporter n'importe quel fichier, y compris le 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"');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X