개발 꿀팁/PHP

php 내보내기csv 형식의 Excel 파일 구현 코드

Jammie 2022. 7. 25. 12:13
반응형

이 글에서 가져온 내용은 php 도출 csv 형식의 엑셀 파일의 구현코드에 관한 것으로, 참고가치가 있으니 필요한 분들은 참고하시어 도움이 되시기 바랍니다

소스 코드 분석
index.php

<?php

require_once "./Export.php";//테스트 데이터

$headerList= ['목록1','목록2','목록3'];

$data = [

    ['값1','값2','값3'],

    ['값11','값22','값33'],

    ['값111','값222','값333']

];

$fileName = "테스트 내보내기 파일 이름";

$tmp = ['백업 필드 1','백업 값 1','','백업 필드 2','백업 값 2'];

$export = new Export();$result = $export->exportToCsv($headerList,$data,$fileName,$tmp);

Export.php

<?php

class export{

    /**

     * params $headerList 헤더 목록 정보 (1D 배열) 필수 전송

     * params $data 내보낸 데이터 (2D 배열) 필수 전송

     * params $filename 파일 이름 변환 필수 전송

     * params $tmp 백업 정보(2D 배열) 선택

     * PS:디지털 포맷이 되면 보이지 않는 기호를 추가하여 정상으로 만들 수 있다,예:"\t"

     **/

    public function exportToCsv($headerList = [] , $data = [] , $fileName = '' , $tmp = []){

        //파일 이름 변환

        $fileName = iconv('UTF-8', 'GBK', $fileName);        //헤더 헤더 설정

        header('Content-Type: application/vnd.ms-excel');

        header('Content-Disposition: attachment;filename=' . $fileName . '.csv');

        header('Cache-Control: max-age=0');        //PHP 파일 핸들 열기, php: //output, 브라우저로 직접 출력하기

        $fp = fopen("php://output","a");        //예비 정보

        foreach ($tmp as $key => $value) {            

        $tmp[$key] = iconv("UTF-8", 'GBK', $value);

        }       

         //fputcsv를 사용하여 데이터를 파일 핸들에 쓰기

        fputcsv($fp, $tmp);        

        //출력 엑셀 목록 이름 정보

        foreach ($headerList as $key => $value) {            

        $headerList[$key] = iconv('UTF-8', 'GBK', $value);//CSV의 EXCEL은 BGK 인코딩을 지원합니다,꼭 바꿔주세요,그렇지 않으면 난수이다

        }        

        //fputcsv를 사용하여 데이터를 파일 핸들에 쓰기

        fputcsv($fp, $headerList);        //계수기

        $num = 0;        

        //$limit행마다 출력 buffer를 새로 고칩니다. 너무 크거나 작거나 하지 마십시오

        $limit = 100000;       

         //데이터를 한 줄 한 줄씩 제거하여 메모리를 낭비하지 않는다

        $count = count($data);        

        for($i = 0 ; $i < $count ; $i++){           

        $num++;            、

        //출력 버퍼를 새로 고쳐서 데이터 과다로 인한 문제를 방지합니다

            if($limit == $num){

                ob_flush();

                flush();                

                $num = 0;

            }            

            $row = $data[$i];            

            foreach ($row as $key => $value) {                

            $row[$key] = iconv('UTF-8', 'GBK', $value);

            }

            fputcsv($fp, $row);

        }

    }
반응형