Como usar o tipo CSV MIME?


125

Em um aplicativo da Web em que estou trabalhando, o usuário pode clicar em um link para um arquivo CSV. Não há um cabeçalho definido para o tipo MIME; portanto, o navegador o renderiza como texto. Gostaria que este arquivo fosse enviado como um arquivo .csv, para que o usuário possa abri-lo diretamente com calc, excel, gnumeric etc.

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

Esse código funciona conforme o esperado no meu computador (não é assim que sempre é?), Mas não funciona em outro computador.

Meu navegador é uma compilação noturna do FF 3.0.1 (no linux). Os navegadores em que não funcionou foram IE 7 e FF 3.0 (no Windows)

Há alguma peculiaridade que eu desconheço?

Respostas:


219

Você pode tentar forçar o navegador a abrir uma caixa de diálogo "Salvar como ...", fazendo algo como:

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

O que deve funcionar na maioria dos principais navegadores.


12

Você não está especificando um idioma ou estrutura, mas o cabeçalho a seguir é usado para downloads de arquivos:

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

5

Com o Internet Explorer, você geralmente precisa especificar o cabeçalho Pragma: public, bem como o download para funcionar corretamente.

header('Pragma: public');

Apenas meus 2 centavos ..


5
Pragma: público não tem nenhum significado para o Internet Explorer. (Eu trabalhei no componente em questão e verifiquei a fonte).
EricLaw

Possivelmente, a utilidade real disso é substituir um cabeçalho Pragma: no-cache pré-existente?
Doin

2

Este código pode ser usado para exportar qualquer arquivo, incluindo 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" pretende ser "octetstream"
EricLaw

2
Isso pode causar um aviso em alguns navegadores: Resource interpretado como documento mas transferido com tipo MIME application / octet-stream
mikeschuld
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.