Bagaimana cara menggunakan tipe CSV MIME?

125

Dalam aplikasi web yang saya kerjakan, pengguna dapat mengklik tautan ke file CSV. Tidak ada header yang ditetapkan untuk tipe mime, jadi browser hanya menerjemahkannya sebagai teks. Saya ingin agar file ini dikirim sebagai file .csv, sehingga pengguna dapat langsung membukanya dengan calc, excel, gnumeric, dll.

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

Kode ini berfungsi seperti yang diharapkan di komputer saya (Bukankah selalu seperti itu?) Tetapi tidak berfungsi di komputer lain.

Browser saya adalah versi FF 3.0.1 di malam hari (di linux). Browser yang tidak berfungsi adalah IE 7 dan FF 3.0 (di windows)

Apakah ada kebiasaan yang tidak saya sadari?

Tadeck
sumber

Jawaban:

219

Anda dapat mencoba memaksa browser untuk membuka dialog "Simpan Sebagai ..." dengan melakukan sesuatu seperti:

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

Yang seharusnya berfungsi di sebagian besar browser utama.

Sean Bright
sumber
12

Anda tidak menentukan bahasa atau kerangka kerja, tetapi tajuk berikut digunakan untuk unduhan file:

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

Dengan Internet Explorer Anda sering harus menentukan Pragma: header publik juga agar unduhan berfungsi dengan benar.

header('Pragma: public');

Hanya 2 sen saya ..

4 tingkat
sumber
5
Pragma: publik tidak memiliki arti apa pun untuk Internet Explorer. (Saya mengerjakan komponen yang dimaksud, dan saya mengambil sumbernya).
EricLaw
Mungkin kegunaan sebenarnya dari ini adalah untuk menggantikan Pragma yang sudah ada: tajuk tanpa cache?
Lakukan
2

Kode ini dapat digunakan untuk mengekspor file apa pun, termasuk 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
sumber
2
"octetstream" dimaksudkan untuk menjadi "octet-stream"
EricLaw
2
Ini dapat menyebabkan peringatan di beberapa peramban: Sumberdaya ditafsirkan sebagai Dokumen tetapi ditransfer dengan aplikasi jenis MIME / octet-stream
mikeschuld