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?

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.


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"

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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.