-
csv 파일 생성하기프로그래밍/PHP 2021. 4. 20. 19:03728x90반응형
fputcsv는 mysql에서 select로 읽어 온 데이터들을
csv로 저장할 때 사용할 수 있는 함수이다.
함수 정의는 아래와 같다.
행은 $fields 배열로 전달되고 지정된 파일 $handle을 사용한다.
$delimiter 는 필드 분리 문자로 기본적으로 ,가 사용되고 한 문자만 사용 가능하다.
$enclosure는 기본적으로 "가 사용하고 역시 한 문자만 사용 가능하다.
$escape_char는 이스케이스 문자로 최대 한 문자만 사용 가능하다.
개행으로 종료된다.
반환 값으로는 쓰여진 문자열의 길이를 반환하거나 실패할 경우 false를 반환한다.
fputcsv ( resource $handle , array $fields , string $delimiter = "," , string $enclosure = '"' , string $escape_char = "\\" ) : int|false
mysql query를 배열로 읽어온 후
칼럼 내용을 저장하고 각 배열 원소당 지정된 파일에 csv 형태로 저장한다.
예시에서는 탭문자를 구분자로 사용하였다.
이 때 주의해야할 것이 개행/탭 문자 등은 ""로 감싸야한다.
try { $mysql->setPreparedStatement($query, $types, $param); $data = $mysql->getPreparedStatementArray(); } catch (Exception $e) { exitWithMsg(3801, $e); } if($data) { $fp = fopen($filename, 'w'); #fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); // UTF-8 file for excel fputs($fp, $colname); foreach($data as $val) { fputcsv($fp, $val, "\t"); // fputcsv($fp, preg_replace('/[\r\n]/', ' ',$val), "\t"); // 개행문자 제거 버전 } fclose($fp); }
생성된 csv파일을 엑셀로 바로 열려고 하면 인코딩이 깨진다.
그럴때 위 주석 처리 된 부분처럼 BOM 을 추가하면 엑셀에서도 인코딩 깨지지 않고 열린다.
그리고 테이블에서 가져온 문자열에 개행문자가 있을경우 csv 파일에 개별의 라인으로 저장되는 이슈가 있는데
그럴 경우 주석처리된 부분처럼 preg_replace로 개행문자를 제거 해주면 된다.
스크립트를 실행하면 아래와 같이 csv 파일이 생성된다.
아지 2020-04-22 "오른쪽 눈에서 눈물"
아지 2020-04-23 "아지 여전히 한쪽눈 눈물"
아지 2020-04-24 "동물병원 다녀옴 약 받아옴" #영수증
아지 2020-04-26 "눈 상태 좋아짐" "앞으로는 감기약 빨리 먹어야지 ㅠㅠ"728x90반응형'프로그래밍 > PHP' 카테고리의 다른 글
이미지 파일 저장소 s3로 이전하기 (0) 2021.06.12 php에서 이미지 사이즈 줄이기 (0) 2021.06.12 [php] explode 사용법 (문자열을 문자열로 분리하기) (2) 2021.03.03 php 에러 기록하기 (0) 2021.03.03 php 시간 표현 예시 - dateTime 사용 예시 (1) 2020.12.31