CODE CAVE

[PHP] 파일 다운로드 소스코드 및 설명 본문

Web/Back-End

[PHP] 파일 다운로드 소스코드 및 설명

코드케이브 2016. 6. 8. 02:46

저번에 파일 업로드를 포스팅 했었는데요~ 


링크는 아래를 클릭하세요 ㅎㅎ


http://kkotkkio.tistory.com/6


파일 업로드 기능을 사이트에 추가하셨다면 당연히 다운로드도 만드시겠죠?


업로드한 이유는 사용자와 공유하며 다운 받기 위함이니까요 ㅋㅋ


다행히 다운로드도 어렵지 않습니다. 짧아요~ 복붙해서 쓰셔도 좋구요 

<?


$filename = "서버상에 업로드 된 파일명";
$reail_filename = urldecode("파일의 원본이름");
$file_dir = "./"디렉토리"/".파일명;

header('Content-Type: application/x-octetstream');
header('Content-Length: '.filesize($file_dir));
header('Content-Disposition: attachment; filename='.$reail_filename);
header('Content-Transfer-Encoding: binary');

$fp = fopen($file_dir, "r");
fpassthru($fp);
fclose($fp);

?>


대략적으로만 설명드리면 php 파일 다운로드는 http 요청의 헤더를 변경하여 구현할 수 있습니다~


위에서는 헤더의 타입과 길이, 파일이름 등을 지정하여 다운로드를 눌렀을 때 저 헤더와 파일을 합쳐서 응답하게 되는 것입니다.


위 소스에서 urldecode는 원본파일명에는 한글이 있을 수 있으므로 사용한 것 이구요,


파일의 전체 경로로 파일 사이즈를 구해오는게 filesize() 입니다. 이건 PHP 내부 함수입니다.


다운로드 될때 실제 파일이름은 유저가 올렸을때 저장한 실제 파일이름으로 하구요, (디비에 저장된 이름이 아닌 실제 유저한테 있었을 때의 파일이름 그대로요 ㅎㅎ 업로드편 포스팅 보시면 더 도움 되실듯)


각종 변수와 헤더 설정이 끝났으면 파일을 읽기모드로 열고 클라이언트에 파일을 던져줍니다.

fopen(파일 포인터 열음) -> fpassthru(fread 후 echo한것과 동일) -> fclose(파일 포인터 종료)


다운로드, 생각보다 간단하죠? 네트워크 공부하신 분이라면 더 깊게 이해하셨을 듯!


아무튼 그럼 모두 즐코딩 되세요!





도움이 되셨다면 아래 하트를 뿅..