프로그래밍/PHP
csv 파일 생성하기
kugancity
2021. 4. 20. 19:03
반응형
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
반응형