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 |