PHP - 파일다운로드 함수
php용 파일다운로드 함수로 주석을 보시면 아시겠지만 해외 사이트에서 가져온 소스입니다. www.swish-db.com의 파일다운로드 처리를 묻는 질문에 대한 답변으로 올려진 소스인데 재밌는 것은 답변하신 분도 첫번째 출처를 모른다는 것입니다. 하지만 분명히 기억하는 것은 copyright free 랍니다. 사용법은 다운로드할 파일명을 받아서 함수 인자로 넘겨주시면 됩니다. 테스트 해 보니까 잘 동작합니다.
<?php //출처-http://www.swish-db.com
dl_file("file.zip"); // or whatever the file name is. function dl_file($file){ //First, see if the file exists if (!is_file($file)) { die("<b>404 File not found!</b>"); }
//Gather relevent info about file $len = filesize($file); $filename = basename($file); $file_extension = strtolower(substr(strrchr($filename,"."),1)); //This will set the Content-Type to the appropriate setting for the file switch( $file_extension ) { case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; case "mp3": $ctype="audio/mpeg"; break; case "wav": $ctype="audio/x-wav"; break; case "mpeg": case "mpg": case "mpe": $ctype="video/mpeg"; break; case "mov": $ctype="video/quicktime"; break; case "avi": $ctype="video/x-msvideo"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files) case "php": case "htm": case "html": case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default: $ctype="application/force-download"; } //Begin writing headers header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer");
//Use the switch-generated Content-Type header("Content-Type: $ctype");
//Force the download $header="Content-Disposition: attachment; filename=".$filename.";"; header($header ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$len); readfile($file); exit; } ?>
|
| |
|
|