¿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?

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.


12

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

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

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 ..


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"');

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.