CodeIgniter3

22. [CodeIgniter3] MySQL에서 CSV파일 내보내기

drizzle0925 2022. 1. 6. 12:54
728x90

데이터 가져오기 및 내보내기 CSV(쉼표로 구분된 값)는 웹 개발에서 가장 널리 사용되는 파일 형식입니다.

CSV 파일을 생성하기 위해 fqutcsv()라는 PHP 메서드를 사용하거나 파일에 쉼표로 구분된 내용을 직접 입력하여 만들 수 있습니다.

 

이번 포스팅에서는 CodeIgniter를 사용하여 MySQL의 데이터를 CSV 파일로 내보내는 방법을 해보겠습니다.

 

Database

아래 쿼리를 사용하여 `tbl_user` 테이블을 생성합니다.

CREATE TABLE IF NOT EXISTS `tbl_user`(
	id int not null primary key auto_increment,
    name varchar(25) not null,
    phone varchar(30) not null,
    email varchar(200) not null
);

 

Controller

application/controllers/ExportController.php 파일을 만들고 아래 코드를 입력합니다.

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

class ExportController extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        // $this->load->helper('url');
        $this->load->model('ExportModel');
    }

    public function index()
    {
        $data = array();
        $data['usersData'] = $this->ExportModel->getUserDetails();
        $this->load->view('export_view', $data);
    }

    // CSV 형식으로 데이터 내보내기
    public function exportCSV()
    {
        // CSV 파일 이름
        $filename = 'users_'.date('Ymd').'.csv';
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$filename");
        header("Content-Type: application/csv");

        // 데이터 가져오기
        $usersData = $this->ExportModel->getUserDetails();

        // 파일 만들기
        $file = fopen('php://output', 'w');

        $header = array("No", "이름", "모바일", "이메일");
        fputcsv($file, $header);

        foreach($usersData as $line)
        {
            fputcsv($file, $line);
        }

        fclose($file);
        exit;
    }
}
?>

 

Model

application/models/ExportModel.php 파일을 만들고 아래 코드를 입력합니다.

<?php 
if(!defined('BASEPATH')) exit('No direct script access allowed');
class ExportModel extends CI_Model
{
    function getUserDetails()
    {
        $response = array();

        // Select record
        $this->db->select('*');
        $q = $this->db->get('tbl_user');
        $response = $q->result_array();

        return $response;
    }
}
?>

 

View

application/views/export_view.php 파일을 만들고 아래 코드를 입력합니다.

<?php 
if(!defined('BASEPATH')) exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MySQL의 데이터를 CSV파일로 내보내기</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
    <!-- Export Data -->
    <a href="<?php echo base_url('/ExportController/exportCSV'); ?>" class="btn btn-primary">내보내기</a><br /><br />

    <!-- User Records -->
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>이름</th>
                <th>이메일</th>
                <th>모바일</th>
            </tr>
        </thead>
        <tbody>
            <?php 
            foreach($usersData as $key => $val)
            {
                echo "<tr>";
                    echo "<td>".$val['name']."</td>";
                    echo "<td>".$val['email']."</td>";
                    echo "<td>".$val['phone']."</td>";
                echo "</tr>";
            }
            ?>
        </tbody>
    </table>
</body>
</html>

 

아래 URL로 접속합니다.

localhost/exportcontroller/

 

내보내기 클릭시 다운로드 폴더에 파일이 다운로드 됩니다.

728x90