마이크로소프트의 인터넷익스플로러에서는 파일이름이 한글로 되어 있을 경우 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 등에서는 위와 같은 인코딩 변환을 해주지 않아도 아무런 문제없이 작동하였다. |