메모智 유머사진 환영합니다, 손님!    메모지 | 회원가입 | 로그인
검색도움말 메모지 검색
  재미메모智.COM 설치   •   메모智 홈   •   바깥고리   •   전체 메모智 목록   •   회원가입   •   로그인   •   도움말   •  
 
PHP 파일 다운로드 스크립트에서의 한글처리 문제 (PHP;file;download;파일다운로드;한글파일이름;UTF-8;EUC-KR;)
메모智 -> 리눅스; 컴퓨터; PHP;
PHP 파일 다운로드 스크립트에서의 한글처리 문제
마이크로소프트의 인터넷익스플로러에서는 파일이름이 한글로 되어 있을 경우 php download 프로그램으로 그냥 보내면 문제가 발생한다. 윈도우의 인코딩이 EUC-KR의 확장판인 반면 리눅스에서는 수년전부터 기본인코딩으로 UTF-8을 사용하고 있기 때문이다.

if(!file_exists($fullpath)){ echo " alert('No File'); history.back();"; exit(0); } else { if(eregi("(MSIE 5.5|MSIE 6.0|MSIE 7.0|MSIE 8.0)", $_SERVER["HTTP_USER_AGENT"]) && !eregi("(Opera|Netscape)", $_SERVER["HTTP_USER_AGENT"])) { $filename = iconv("UTF-8", "EUC-KR", $filename); header("Content-Description: File Transfer"); header("Content-Type: application/octet-stream"); header("Content-Length: ".$size); header("Content-Disposition: attachment; filename=\"".$filename."\""); header("Content-Transfer-Encoding: Binary"); header("Pragma: no-cache; public"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); } else { header("Content-Description: File Transfer"); header("Content-Type: file/unknown"); header("Content-Length: ".$size); header("Content-Disposition: attachment; filename=\"".$filename."\""); header("Content-Description: PHP Generated Data"); header("Pragma: no-cache; public"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); } ob_clean(); flush(); readfile("$path"); }
위와 같이 PHP로 download.file.php라는 프로그램을 짰다. 여기서 다른 곳에서 보는 사이트들과 다른 부분은 $filename = iconv("UTF-8", "EUC-KR", $filename);라는 부분이다. 이는 MSIE에서 파일명이 한글인 경우에 문제가 발생하는 것을 방지해준다.

불여우(파이어폭스/FireFox) 3.6.3, 구글 크롬(Google Chrome) 4.1 등에서는 위와 같은 인코딩 변환을 해주지 않아도 아무런 문제없이 작동하였다.
작성자: 써기 추천수: 3 첨부파일: 0 등록일: 공개 MEMO
이 메모智에 달린 꼬리표 #PHP #file #download #파일다운로드 #한글파일이름 #UTF-8 #EUC-KR 로그인후 꼬리표 입력가능 회원만 꼬리표 입력 가능합니다.
jinsuk
이 소스를 그대로 가져다 사용하면 심각한 파일 다운로드 취약점이 발생할 수 있습니다. filename 변수에 대한 검증을 통해 허용된 디렉토리의 파일만 다운로드 할 수 있도록 해야 합니다.

 

drupal hit counter

Site Stat
검색
Custom Search
모든 지식은 개인의 소유입니다.
그 외의 다른 내용은 Copyright © since 2010, 메모智.com이 가집니다.
메모지사용시 주의사항연락처powered by 크리스탈