[PHP] 다운로드 구현시 파일이름에 [1] 등이 자동으로 붙어버리는 문제
게시판같은곳에 파일을 첨부할때 파일이름에 .(쩜)이 두개 이상 붙으면
다운받을때 브라우저에서 파일이름에 [1]같은것을 붙혀버립니다.
(예를들면 xxx.tar.z같은 파일을 다운받을때 xxx[1].tar.z 로 바뀌어버림)
이러한 문제를 해결하고 싶으시면 아래 간단한 팁을 이용하시면 됩니다.
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$파일이름 = preg_replace('/\./', '%2e', $서버에저장된파일이름, substr_count($서버에저장된파일이름, '.') - 1);
}
아래는 파일 다운로드 페이지 구현시 실제 사용예제입니다.
/********************************** 예제 *******************************************/
// 파일열기모드 옵션값
$dn = 1; // 1 : 다운 0 : 실행
$dn_yn = ($dn) ? "attachment" : "inline";
// 디렉토리 정보
$dir = "/파일이저장된경로/";
// 서버에 저장된 파일명
$filen=" "
// 서버 저장되기 전 실제 파일명
$filen2=" ";
// 서버에 저장된 경로명+파일명
$file = $dir.$filen;
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$dnfile = preg_replace('/\./', '%2e', $filen2, substr_count($filen2, '.') - 1);
}
if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT))
{
if(strstr($HTTP_USER_AGENT, "MSIE 5.5"))
{
Header("Content-Type: doesn/matter");
Header("Content-disposition: filename=$dnfile");
Header("Content-Transfer-Encoding: binary");
Header("Pragma: no-cache");
Header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.0"))
{
Header("Content-type: file/unknown");
Header("Content-Disposition: $dn_yn; filename=$dnfile");
Header("Content-Description: PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.1"))
{
Header("Content-type: file/unknown");
Header("Content-Disposition: $dn_yn; filename=$dnfile");
Header("Content-Description: PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 6.0"))
{
Header("Cache-Control: ");
Header("Pragma: ");
Header("Content-type: application/x-msdownload");
Header("Content-Length: ".(string)(filesize("$file")));
Header("Content-Disposition: $dn_yn; filename=$dnfile");
Header("Content-Transfer-Encoding: binary");
Header("Pragma: no-cache");
Header("Expires: 0");
}
}
else
{
Header("Cache-Control: ");
Header("Pragma: ");
Header("Content-type: file/unknown");
Header("Content-Length: ".(string)(filesize("$file")));
Header("Content-Disposition: $dn_yn; filename=$dnfile");
Header("Content-Description: PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
if(is_file($file))
{
$fp = fopen($file, "rb");
if (!fpassthru($fp))
fclose($fp);
}
else
{
echo "해당 파일이나 경로가 존재하지 않습니다.";
}
?>