Jak używać typu MIME CSV?

125

W aplikacji internetowej, nad którą pracuję, użytkownik może kliknąć łącze do pliku CSV. Nie ma ustawionego nagłówka dla typu MIME, więc przeglądarka po prostu renderuje go jako tekst. Chciałbym, aby ten plik został wysłany jako plik .csv, aby użytkownik mógł go bezpośrednio otworzyć za pomocą programu calc, excel, gnumeric itp.

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

Ten kod działa zgodnie z oczekiwaniami na moim komputerze (czy nie tak jest zawsze?), Ale nie działa na innym komputerze.

Moja przeglądarka to nocna kompilacja FF 3.0.1 (na Linuksie). Przeglądarki, w których nie działał, to IE 7 i FF 3.0 (w systemie Windows)

Czy są jakieś dziwactwa, o których nie wiem?

Tadeck
źródło

Odpowiedzi:

219

Możesz spróbować zmusić przeglądarkę do otwarcia okna dialogowego „Zapisz jako ...”, wykonując na przykład:

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

Które powinno działać w większości głównych przeglądarek.

Sean Bright
źródło
12

Nie określasz języka ani struktury, ale do pobierania plików używany jest następujący nagłówek:

"Content-Disposition: attachment; filename=abc.csv"
gimel
źródło
5

W przeglądarce Internet Explorer często trzeba określić nagłówek Pragma: public, aby pobieranie działało prawidłowo.

header('Pragma: public');

Tylko moje 2 centy ...

4 poziomy
źródło
5
Pragma: public nie ma żadnego znaczenia dla Internet Explorera. (Pracowałem nad tym komponentem i grepowałem źródło).
EricLaw,
Być może rzeczywistą użytecznością tego jest zastąpienie istniejącego wcześniej nagłówka Pragma: no-cache?
Doin
2

Ten kod może służyć do eksportowania dowolnego pliku, w tym 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
źródło
2
„Strumień oktetowy” oznacza „strumień
oktetów
2
Może to spowodować ostrzeżenie w niektórych przeglądarkach: Zasób zinterpretowany jako dokument, ale przesłany za pomocą aplikacji typu MIME / octet-stream
mikeschuld