본문 바로가기

Coding

[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 "해당 파일이나 경로가 존재하지 않습니다."; 
}
?>