CSV File Generator Dengan CodeIgniter

Posted on Updated on

Dari Bulan Juni minggu terakhir sampai dengan akhir Bulan Juli saya disibukkan dengan kerja praktek. Tapi walaupun begitu, saya usahakan untuk tetap mengupdate blog ini, bismillah. Kali ini saya ingin membagi wawasan tentang file CSV. File CSV (Comma Separated Value) merupakan salah satu alternatif bentuk penyimpanan data back-up yang telah disimpan di dalam database. File ini biasanya digunakan pada aplikasi yang membutuhkan fitur pemindahan data yang digunakan oleh lebih dari 1 aplikasi. Dalam pengembangan aplikasi berbasis web, file CSV dapat di-generate dengan mudah menggunakan framework Codeigniter. Codeigniter merupakan framework yang digunakan untuk mengembangkan aplikasi berbasis PHP. Framework ini sangat sering saya gunakan dalam utak-atik aplikasi berbasis web. Caranya mudah, pada struktur project Codeigniter, tambahkan tambahkan file helper baru dengan nama csv_helper.php di folder application-helpers.

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// ------------------------------------------------------------------------

/**
 * CSV Helpers
 * Inspiration from PHP Cookbook by David Sklar and Adam Trachtenberg
 *
 * @author		Jérôme Jaglale
 * @link		http://maestric.com/en/doc/php/codeigniter_csv
 */

// ------------------------------------------------------------------------

/**
 * Array to CSV
 *
 * download == "" -> return CSV string
 * download == "toto.csv" -> download file toto.csv
 */
if ( ! function_exists('array_to_csv'))
{
	function array_to_csv($array, $download = "")
	{
		if ($download != "")
		{
			header('Content-Type: application/csv');
			header('Content-Disposition: attachement; filename="' . $download . '"');
		}

		ob_start();
		$f = fopen('php://output', 'w') or show_error("Can't open php://output");
		$n = 0;
		foreach ($array as $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;
		}
	}
}

// ------------------------------------------------------------------------

/**
 * Query to CSV
 *
 * download == "" -> return CSV string
 * download == "toto.csv" -> download file toto.csv
 */
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() as $name)
			{
				$line[] = $name;
			}
			$array[] = $line;
		}

		foreach ($query->result_array() as $row)
		{
			$line = array();
			foreach ($row as $item)
			{
				$line[] = $item;
			}
			$array[] = $line;
		}

		echo array_to_csv($array, $download);
	}
}

/* End of file csv_helper.php */
/* Location: ./system/helpers/csv_helper.php */

Setelah file helper selesai, langkah berikutnya adalah membuat sebuah controller yang akan menghandle ekspor CSV dari database. Di dalam controller ini dituliskan sintaks SQL yang akan menjadi isi dari file CSV nantinya. Sebagai contoh, buat file dengan nama generatecsv.php di bawah folder application-controller. Pada contoh berikut, isi dari file CSV adalah back-up data dari tabel bernama pegawai.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Generatecsv extends CI_Controller{
    function __construct() {
        parent::__construct();
        $this->load->database();
        $this->load->helper('url');
        $this->load->helper('csv');
    }

    //nama variabel untuk tabel
    private $tabel_pegawai      =   "pegawai";

    function index()
    {

    }

    //sampel create CSV file from MySQL
    function export_csv_pegawai()
    {
        $query  =   $this->db->query("SELECT * FROM ".$this->tabel_pegawai);
        $num    =   $query->num_fields();
        $var    =   array();
        $i      =   1;
        $fname  =   "";
        while ($i <= $num)
        {
            $test   =   $i;
            $value  =   $this->input->post($test);
            if($value != '')
            {
                $fname = $fname." ".$value;
                array_push($var, $value);
            }
            $i++;
        }
        $fname  =   trim($fname);
        $fname  =   str_replace(' ', ';', $fname);

        $this->db->select($fname);
        $quer  =   $this->db->get($this->tabel_pegawai);
        query_to_csv($quer,TRUE,'Pegawai_'.  date('dMy').'.csv');
    }
}
?>

Semoga bermanfaat, selamat berkarya 🙂

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s