Katakanlah saya memiliki database .... apakah ada cara saya dapat mengekspor apa yang saya miliki dari database ke file CSV (dan file teks [jika mungkin]) melalui PHP?
di server lokal berfungsi, tetapi di kejauhan ia menampilkan halaman baru dengan konten dan tanpa jendela unduhan (maaf untuk bahasa Inggris saya)
khaled_webdev
2
Mungkin ada beberapa alasan untuk kesalahan, cara paling sederhana untuk menemukannya adalah dengan melihat file apache error.log Anda.
Alain Tiemblo
7
Anda perlu die();menelepon setelah itu echo array2csv();, akan mengedit jawaban saya. Pastikan untuk membuat csv Anda sebelum mengeluarkan sesuatu di halaman Anda.
Atau, Anda dapat melakukan fputcsv () di dalam loop assoc assoc standar dan menjatuhkannya langsung dari hasil yang dikembalikan.
DampeS8N
10
@ DampeS8N, +1 untuk penggunaan "plop it down straight out" dalam kalimat.
AnchovyLegend
ini disalin tanpa atribusi dari manual PHP untuk fputcsv
BenK
14
Sekadar catatan, penggabungan adalah waaaaaay lebih cepat (maksud saya) daripada fputcsvatau bahkan implode; Dan ukuran file lebih kecil:
// The data from Eternal Oblivion is an object, always
$values =(array) fetchDataFromEternalOblivion($userId, $limit =1000);// ----- fputcsv (slow)// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output",'w');
fputcsv($csv, array_keys(reset($values)));foreach($values as $row){
fputcsv($csv, $row);}
fclose($csv);return ob_get_clean();// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))). PHP_EOL;foreach($values as $row){
$csv .='"'. implode('","', $row).'"'. PHP_EOL;}return $csv;// ----- concatenation (fast, file size is smaller)// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))). PHP_EOL;
$i =1;// This is less flexible, but we have more control over the formattingforeach($values as $row){
$csv .='"'. $row['id'].'",';
$csv .='"'. $row['name'].'",';
$csv .='"'. date('d-m-Y', strtotime($row['date'])).'",';
$csv .='"'.($row['pet_name']?:'-').'",';
$csv .= PHP_EOL;}return $csv;
Ini adalah kesimpulan dari optimalisasi beberapa laporan, dari sepuluh hingga ribuan baris. Tiga contoh bekerja dengan baik di bawah 1000 baris, tetapi gagal ketika data lebih besar.
Jawaban:
Saya pribadi menggunakan fungsi ini untuk membuat konten CSV dari array apa pun.
Kemudian Anda dapat membuat pengguna mengunduh file itu menggunakan sesuatu seperti:
Contoh penggunaan:
sumber
die();
menelepon setelah ituecho array2csv();
, akan mengedit jawaban saya. Pastikan untuk membuat csv Anda sebelum mengeluarkan sesuatu di halaman Anda.Anda dapat mengekspor tanggal menggunakan perintah ini.
Pertama, Anda harus memuat data dari server mysql ke array
sumber
Sekadar catatan, penggabungan adalah waaaaaay lebih cepat (maksud saya) daripada
fputcsv
atau bahkanimplode
; Dan ukuran file lebih kecil:Ini adalah kesimpulan dari optimalisasi beberapa laporan, dari sepuluh hingga ribuan baris. Tiga contoh bekerja dengan baik di bawah 1000 baris, tetapi gagal ketika data lebih besar.
sumber
Saya merekomendasikan parsecsv-for-php untuk mengatasi sejumlah masalah dengan baris baru dan kutipan bersarang.
sumber
Bekerja dengan lebih dari 100 baris, jika Anda menentukan ukuran file di header, panggil metode get () di kelas Anda sendiri
sumber
kode pra-dibuat terlampir di sini. Anda dapat menggunakannya hanya dengan menyalin dan menempelkan kode Anda:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv
sumber
Sama seperti @ Dampes8N berkata:
Semoga ini membantu.
sumber