관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

PHP 파일다운로드(download) 구현 소스 본문

프로그래밍/SQL & PHP

PHP 파일다운로드(download) 구현 소스

님투 2008. 12. 16. 15:42
반응형

PHP 파일다운로드(download) 구현 소스

   

PHP에서 파일 다운로드 관련 소스로 앞에 있는 업로드 소스와 같이 사용하시면 되겠습니다.

역시 $dir 을 서버환경에 맞게 설정하셔야 합니다.

   

작동방식은 간단합니다. 게시판을 예를 들어 보면 게시물 식별번호를 넘겨주면 된답니다.

만약 이 다운로드 페이지명이 down.php 라면...

   

<a href="down.php?no=식별번호">다운받기</a>

   

이렇게 링크를 거시고 소스 중간부분에 주석처리 되어 있는 부분에 파일 정보를 로드 할 수 있는 소스를 자신의 환경에 맞게 추가 하시면 됩니다.

   

그럼 중간에 주석부분 설명을 잘 확인 하시기 바라면서 이만....^^/

   

<?
$dir = "upload/";         // 파일이 저장되어 있는 폴더 설정

 function goBack($msg='', $url='') {
   echo "<script>";
   if($msg) echo 'alert("'.$msg.'");';
   if($url) echo 'location.replace("'.$url.'");';
   else echo 'history.go(-1);';
   echo "</script>";
}

//▶ 외부에서 접근시에 에러 출력하는 부분으로 테스트 하실 때에는 주석처리 하시는 것이 좋습니다..^^
/*
if(!$_SERVER["HTTP_REFERER"] || !ereg(str_replace(".","\\.",$_SERVER["HTTP_HOST"]), $_SERVER["HTTP_REFERER"])) {
   goBack("정상적인 방법으로 다운로드해 주세요.");
   exit;
}

이 부분에 DB 에서 다운로드할 파일정보를 읽어옮

예: $row = mysql_fetch_array(mysql_query("select real_file_name, new_file_name from 테이블명 where no = '$no'"));
테스트를 위해선 $row[0] 와 $row[1] 을 지정해서 테스트하세요.

$row[0] = "testfile.jpg";
$row[1] = "6548d22b85bdc59a2145e7a1ee9b0788";
*/

$real_name = stripslashes($row[0]);
$save_name = $dir.stripslashes($row[1]);

//▶ 만약 파일이 없을 경우 에러출력
if(!file_exists($save_name)) {
   goBack("다운로드할 파일을 찾을 수 없습니다.");
   exit;
} else {// 파일이 있으면 다운로드
   if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $_SERVER["HTTP_USER_AGENT"]) && !eregi("(Opera|Netscape)", $_SERVER["HTTP_USER_AGENT"])) {
      Header("Content-type: application/octet-stream");
      Header("Content-Length: ".filesize($save_name));
      Header("Content-Disposition: attachment; filename=".$real_name);
      Header("Content-Transfer-Encoding: binary");
      Header("Pragma: no-cache");
      Header("Expires: 0");
   } else {
      Header("Content-type: file/unknown");
      Header("Content-Length: ".filesize($save_name));
      Header("Content-Disposition: attachment; filename=".$real_name);
      Header("Content-Description: PHP3 Generated Data");
      Header("Pragma: no-cache");
      Header("Expires: 0");
   }
   $fp = fopen($save_name, "rb");
   if(!fpassthru($fp)) fclose($fp);
}
?>

반응형
Comments