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?

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.


12

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

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

5

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

header('Pragma: public');

Hanya 2 sen saya ..


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.