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 rend simplement sous forme de texte. Je souhaite que ce fichier soit envoyé au format .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 (sur linux). Les navigateurs avec lesquels il ne fonctionnait pas étaient IE 7 et FF 3.0 (sous Windows)
Y a-t-il des bizarreries que je ne connais pas?
Vous pouvez essayer de forcer le navigateur à ouvrir une boîte de dialogue "Enregistrer sous ..." en procédant comme suit:
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.
Vous ne spécifiez pas de langage ou de structure, mais l'en-tête suivant est utilisé pour les téléchargements de fichiers:
"Content-Disposition: attachment; filename=abc.csv"
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 ..
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"');