2008-12-29 14 views
119

En una aplicación web en la que estoy trabajando, el usuario puede hacer clic en un enlace a un archivo CSV. No hay un conjunto de encabezados para el tipo MIME, por lo que el navegador simplemente lo representa como texto. Me gustaría que este archivo para ser enviado como un archivo CSV, por lo que el usuario puede abrir directamente con cálculo, Excel, Gnumeric, etc.¿Cómo usar el tipo CSV MIME?

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

Este código funciona como se esperaba en mi equipo (No se tiene ¿cómo es siempre?) pero no funciona en otra computadora.

Mi navegador es una compilación nocturna de FF 3.0.1 (en linux). Los navegadores en los que no funcionó fueron IE 7 y FF 3.0 (en Windows)

¿Hay alguna peculiaridad que desconozco?

Respuesta

207

Se podría tratar de forzar al navegador para abrir en "Guardar como ..." de diálogo haciendo algo como:

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

que deberían funcionar en la mayoría de los navegadores principales.

10

no especifica un idioma o marco, pero la siguiente cabecera se utiliza para la descarga de archivos:

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

Con Internet Explorer a menudo hay que especificar el encabezado Pragma: pública, así como para la descarga funcione adecuadamente ..

header('Pragma: public'); 

Sólo mi 2 centavos ..

+4

Pragma: public no tiene ningún significado para Internet Explorer. (Trabajé en el componente en cuestión y agrupé la fuente). – EricLaw

+0

Posiblemente la utilidad real de esto es reemplazar un pragma preexistente: encabezado no-caché? – Doin

1

Este código se puede utilizar para exportar cualquier archivo, incluyendo 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á destinado a ser "octet-stream" – EricLaw

+2

Esto puede causar una advertencia en algunos navegadores: recurso interpretado como documento pero transferido con tipo MIME application/octet-stream – mikeschuld