Monday, January 12, 2009

파일 다운로드


if(!$file) {
echo "\n";
exit;
} else {
// 파일 정보는 가지고 옵니다.
$enfile=urlencode($file); // 파이명이나 경로에 한글이나 공백이 포함될 경우를 고려
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));

// Content_Type 결정
switch ($file_extension) {
// 일반 애플리케이션의 Content-Type 입니다.
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "pdf"; $ctype="application/pdf"; break;
case "doc"; $ctype="application/msword"; break;
case "ppt"; $ctype="application/vnd.ms-powerpoint"; break;
case "xls"; $ctype="application/vnd.ms-excel"; break;

// 이미지 파일에 대한 Content-Type 입니다.
case "png"; $ctype="image/png"; break;
case "jpeg";
case "jpg"; $ctype="image/jpeg"; break;
case "gif"; $ctype="image/gif"; break;

// 동영상과 음성에 대한 Content-Type 입니다.
case "mp3"; $ctype="audio/mpeg"; break;
case "wave";
case "wav"; $ctype="audio/x-wav"; break;
case "mpeg";
case "mpe";
case "mpg"; $ctype="video/mpeg"; break;
case "mov"; $ctype="video/quicktime"; break;
case "avi"; $ctype="video/x-msvideo"; break;

case "php";
case "htm";
case "html";
case "txt"; die("Cannot be used for ".$file_extension."file!"); break;
default ; $ctype="application/force-download";
}

// 헤더 설정
header("Content-Type: $ctype");
header("Content-Length: ".$len);
header("Content-Disposition: attachment; filename=$enfile");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); //HTTP 1.0 문법입니다. 1.1에서는 Cache-Control를 사용해야합니다.
header("Expires: 0");

// 파일을 연다.
$fp=fopen("$file", "r");
while(!feof($fp)) {
print(fread($fp,1024*8));
flush();
}
fclose($fp);
exit;
}

?>