본문으로 바로가기

csv 한글 인코딩

category Backend/PHP 2019. 11. 26. 14:06

csv 한글 인코딩


우선 서버에서는 csv 파일이 생성이 안되더라.. 그래서 미리 윈도우에서 csv 파일을 영어이름으로 만들어서 서버에 ftp로 전송 후

파일 권한을 변경해주자 기본적으로 644일텐데 그냥 777했다 ㅎ


이후 파일 생성 후 단계는 아래와 같다.


1. 내용을 비우고 공백으로 새로 쓰고 저장 후 닫는다

$filename = "test.csv"; 
$file = $_SERVER['DOCUMENT_ROOT']."/excel/".$filename;
 
$fp = fopen($file, "w");
fwrite($fp, '');
fclose($fp);



2. 이어쓰기로 (커서는 현재 내용의 맨끝) 열어서 헤더를 작성하고 내용을 채운다

$fp = fopen($file,"a+");
 
$header = '번호,이름,생년월일'."\r\n";
 
fwrite($fp, $header);
 
$str = '';



참고로 윈도우에서의 개행은 \r\n 이고 리눅스는 \n 이다. (윈도우에서 열꺼니까 \r\n)


3. 채우고 싶은 내용을 만들어서 파일에 쓰고 마지막으로 파일을 닫는다

$str .= '1,홍길동,1990-01-01'."\r\n";
$str .= '2,김길동,1990-01-01'."\r\n";
$str .= '3,오길동,1990-01-01'."\r\n";
 
fwrite($fp, $str);
fclose($fp);



4. 파일의 내용만 다시 꺼내서 UTF-8에서 EUC-KR로 인코딩한다.

(서버의 character set 환경을 확인 후 그것에서 EUC-KR로 인코딩해야한다)

$content = file_get_contents($file);
$content = iconv("UTF-8", "EUC-KR", $content);



5. 인코딩 한 후 다시 파일을 새로 열어 내용을 담고 저장하고 종료

$fp = fopen($file, "w");
fwrite($fp, $content);
fclose($fp);



6. 마지막으로 파일의 존재를 확인 후 파일 다운로드

if (is_file($file)) {
 
    if (preg_match("MSIE", $_SERVER['HTTP_USER_AGENT'])) { 
        header("Content-Type: text/html; charset=EUC-KR");
        header("Content-type: application/octet-stream"); 
        header("Content-Length: ".filesize($file));
        header("Content-type: application/csv"); 
        header("Content-Disposition: attachment; filename=".$filename);
        header("Content-Transfer-Encoding: binary"); 
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Pragma: public"); 
        header("Expires: 0"); 
    }
    else { 
        header("Content-Type: text/html; charset=EUC-KR");
        header("Content-Length: ".filesize($file)); 
        header("Content-type: application/csv"); 
        header("Content-Disposition: attachment; filename=".$filename);
        header("Content-Description: PHP3 Generated Data"); 
        header("Pragma: no-cache"); 
        header("Expires: 0"); 
    }
 
    $fp = fopen($file, "rb");
    fpassthru($fp);
    fclose($fp);
 
    
}
else {
    echo "해당 파일이 없습니다.";
}



'Backend > PHP' 카테고리의 다른 글

csv 대용량 파일 인코딩 후 다운로드까지  (0) 2019.11.29
ftp 사용법  (0) 2019.11.26
파일 다운로드 용량제한 풀기  (0) 2019.11.05
파라미터 키값으로 변수만들기  (0) 2019.11.05
이미지 웹에서 불러오기  (0) 2019.11.01