php - Export CSV file from Codeigniter -
i using csv_helper.php file in helpers exporting. grabing results mysql showing results instead of downloading ! here's csv_helper
<?php if ( ! defined('basepath')) exit('no direct script access allowed'); if ( ! function_exists('array_to_csv')) { function array_to_csv($array, $download = "") { if ($download != "") { header('content-type: application/csv'); header('content-disposition: attachment; filename="' . $download . '"'); } ob_start(); $f = fopen('php://output', 'w') or show_error("can't open php://output"); $n = 0; foreach ($array $line) { $n++; if ( ! fputcsv($f, $line)) { show_error("can't write line $n: $line"); } } fclose($f) or show_error("can't close php://output"); $str = ob_get_contents(); ob_end_clean(); if ($download == "") { return $str; } else { echo $str; } } } if ( ! function_exists('query_to_csv')) { function query_to_csv($query, $headers = true, $download = "") { if ( ! is_object($query) or ! method_exists($query, 'list_fields')) { show_error('invalid query'); } $array = array(); if ($headers) { $line = array(); foreach ($query->list_fields() $name) { $line[] = $name; } $array[] = $line; } foreach ($query->result_array() $row) { $line = array(); foreach ($row $item) { $line[] = $item; } $array[] = $line; } echo array_to_csv($array, $download); } }
and here's controller function:
public function exportuser() { $this->load->database(); $query = $this->db->get('user'); $this->load->helper('csv'); query_to_csv($query, true, 'toto.csv'); }
and in view page showing results: user_id,user_name,user_email,user_pass,user_phone,user_country,user_city,user_zip,user_address,user_type,user_status 53,abcdef,abcd@yahoo.com,12,1,,0,,,student,1 54,aws,abc@yahoo.com,12,12,afghanistan,kapisa,,,"resource person",0 55,onti,ontika@ya.com,12,12,,0,,,"registered user",1 56,edf,df@abc.com,12,12,albania,bulqize,,dewde,"admin user",1 58,meena,meena@abc.com,,,,,,,"registered user",0 61,nisat,nisat@abc.com,,,,,,,"registered user",0
but not downloading ! tried chrome , mozilla both....
what do???
thank in advance !
try modifying headers in array_to_csv() funtion:
// disable caching $time = gmdate('d, d m y h:i:s'); header('expires: tue, 03 jul 2001 06:00:00 gmt'); header('cache-control: max-age=0, no-cache, must-revalidate, proxy-revalidate'); header('last-modified: ' . $time . ' gmt'); // force download header('content-type: application/force-download'); header('content-type: application/octet-stream'); header('content-type: application/download'); // set encoding header('content-disposition: attachment;filename=' . $download); header('content-transfer-encoding: binary');
then after output section, add exit:
if ($download == "") { return $str; } else { echo $str; } exit;
or try using codeigniter's built-in functions:
public function exportuser() { // load database , query $this->load->database(); $query = $this->db->get('user'); // load database utility class $this->load->dbutil(); // create csv output $data = $this->dbutil->csv_from_result($query); // load download helper $this->load->helper('download'); // stream download force_download('toto.csv', $data); }
thanks,
andrew
Comments
Post a Comment