¿Cómo usar el tipo CSV MIME?

125

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 encabezado establecido para el tipo mime, por lo que el navegador solo lo representa como texto. Me gustaría que este archivo se envíe como un archivo .csv, para que el usuario pueda abrirlo directamente con calc, excel, gnumeric, etc.

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

Este código funciona como se esperaba en mi computadora (¿no es así como siempre es?) 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 funcionaba eran IE 7 y FF 3.0 (en Windows)

¿Hay alguna peculiaridad que desconozco?

Tadeck
fuente

Respuestas:

219

Puede intentar forzar al navegador a abrir un cuadro de diálogo "Guardar como ..." haciendo algo como:

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

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

Sean Bright
fuente
12

No está especificando un idioma o marco, pero el siguiente encabezado se utiliza para descargas de archivos:

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

Con Internet Explorer, a menudo debe especificar el encabezado Pragma: public para que la descarga funcione correctamente.

header('Pragma: public');

Solo mis 2 centavos ..

4 niveles
fuente
55
Pragma: public no tiene ningún significado para Internet Explorer. (Trabajé en el componente en cuestión y agarré la fuente).
EricLaw
Posiblemente, la utilidad real de esto es reemplazar un Pragma preexistente: ¿encabezado sin caché?
Doin
2

Este código se puede usar para exportar cualquier archivo, incluido 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"');
Yuri Korolov
fuente
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 la aplicación de tipo MIME / octet-stream
mikeschuld