php 에서 파일다운로드하는 방법은 다음과같이 Header 를 이용하여야 한다.

오늘 삽질을 좀 했는데 계속 헤더 앞에 다른 문자가 출력되어있다는 에러가 나는 것이다...

도데체 뭘까... 한 시간의 삽질 끝에... <?  <- 요거 앞에 한칸의 공백이 있는 것을 발견했다....

Header 를 사용할 때는 그 앞에 어떤 것도 출력되면 안된다.

이 소스를 개발할 때는 이 것을 주의해야한다.

꼼꼼하게 앞에 빈칸이 없도록 해야할 것을 잊지말자.


<?
class filemodel extends model
{
    function get_mode()
    {
        $file_id = $this -> get_check("file_id", "plus");
        $file = mysql::singleton("file") -> get_file_name($file_id);
        $file_url = $file['file_url'];
        $file_name = $file['file_name'];
        $f_name = basename($file_name);
        $downloadPath = $file_url;
        Header("Content-Type: file/unknown");
        Header("Content-Disposition: attachment; filename=". $f_name);
        Header("Content-Length: ".filesize("$downloadPath"));
        header("Content-Transfer-Encoding: binary ");
        Header("Pragma: no-cache");
        Header("Expires: 0");

        flush();


        if ($fp = fopen("$downloadPath", "r")) {
            print fread($fp, filesize("$downloadPath"));
        }
        fclose($fp);
    }
}
?>

참고로 링크는 이런식으로 하면 되겠지?

<a href="/api/index.php?model=file&mode=get&file_id=<?=$value['file_id1']?>&view=script" ><?=$value['file1']['file_name'];?></a>

화이링~^^

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon 겨울 2008.12.10 14:22  댓글주소  수정/삭제  댓글쓰기

    불로그 글 작성에 도움이 되실까 해서 정보를 하나 알려 드리고자 합니다. 무료로 고용량 파일을 배포해 주는 사이트가 하나 생겼습니다.
    MAXFREE라고 하는데 (www.maxfree.co.kr) 거기 가시면 고화질 동영상이나 고용량 파일들을 무료로 배포하실 수 있습니다. 최근 제가 여기에 계정 만들어서 1GB급 동영상을 스트리밍으로 카페 회원들과 공유 중인데 정말 좋습니다. 올리는 사람도 무료이고, 보는 사람도 무료라서 웹하드처럼 다운로드 받는 사람들이 돈 낼 필요가 없는 것 같습니다. 다만 기업 회원들만 된다고 해서 저희 식당 사업자 등록증 번호로 계정 만들었습니다. ^^ 하여간 여기 불로그에 올라오는 글들과 연관성이 있을 것 같아서 알려드리고 갑니다.

PHP 날짜 함수 정리 ( Write By Yaku)

 

오늘로부터 5일 후

echo date("Y-m-d",strtotime("+5 day"));
다음은 오늘로부터 3일 전이 되겠습니다.
echo date("Y-m-d",strtotime("-3 day"));

 

오늘로부터 6주 전

$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감
$needday = strtotime("-6 week"); // 6
주전
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday));
echo $needday;

 

윤년

if(29==date(t,mktime(0,0,0,2,1,$year))
echo "
윤년";
else echo "
윤년아님";

 

--mktime(,,,,,년도)--

 

그 달의 마지막 날짜  가지고 오기

$lastday = date(t,mktime(0,0,1,$month,1,$year));

 

금주의 시작일 구하기

$now=date("w");

$m=$now-1;

$start=date("Y-n-d",strtotime("-$m day"));

 

 

 

 

JS 날짜 정리 ..

Month ( 0 ~ 11까지 정의 된다 )  현재월을 표시하려면 month -1 하여라 ..

 

날짜 객체  생성  var today = new Date( , , ) ;

날짜 년 가지고 오기 today.getYear();

날짜 월 가지고 오기 today.getMonth();  ( 현재월 가지고 올경우  +1 )

날짜 일 가지고 오기 today.getDate();  (day 가 아니 getDate 이다)

날짜 월 짜리수 맞추기 위한 if = parseInt() < 10 ? - + parseInt() : parseInt();

 

 

 

Mysql 날짜 함수

select date_sub(now(), interval 5 day);
5
일후..
select date_add(now(), interval 5 day);
5
일전...

PHP 날짜 함수 정리 ( Write By Yaku)

 

오늘로부터 5일 후

echo date("Y-m-d",strtotime("+5 day"));
다음은 오늘로부터 3일 전이 되겠습니다.
echo date("Y-m-d",strtotime("-3 day"));

 

오늘로부터 6주 전

$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감
$needday = strtotime("-6 week"); // 6
주전
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday));
echo $needday;

 

윤년

if(29==date(t,mktime(0,0,0,2,1,$year))
echo "
윤년";
else echo "
윤년아님";

 

--mktime(,,,,,년도)--

 

그 달의 마지막 날짜  가지고 오기

$lastday = date(t,mktime(0,0,1,$month,1,$year));

 

금주의 시작일 구하기

$now=date("w");

$m=$now-1;

$start=date("Y-n-d",strtotime("-$m day"));

 

 

 

 

JS 날짜 정리 ..

Month ( 0 ~ 11까지 정의 된다 )  현재월을 표시하려면 month -1 하여라 ..

 

날짜 객체  생성  var today = new Date( , , ) ;

날짜 년 가지고 오기 today.getYear();

날짜 월 가지고 오기 today.getMonth();  ( 현재월 가지고 올경우  +1 )

날짜 일 가지고 오기 today.getDate();  (day 가 아니 getDate 이다)

날짜 월 짜리수 맞추기 위한 if = parseInt() < 10 ? - + parseInt() : parseInt();

 

 

 

Mysql 날짜 함수

select date_sub(now(), interval 5 day);
5
일후..
select date_add(now(), interval 5 day);
5
일전...

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

먼저 디비에서 파일을 불러온다.
  $file_name = mysql::singleton("item") -> get_file_name($file_id);

URL 에서 이름만 뽑아낸다.
 $f_name = basename($file_name);

다운로드 패스를 지정
   $downloadPath = "..".$file_name;
 
중요한 부분.  
  Header("Content-Type: file/unknown");
  Header("Content-Disposition: attachment; filename=". $f_name);
  Header("Content-Length: ".filesize("$downloadPath"));
  header("Content-Transfer-Encoding: binary ");
  Header("Pragma: no-cache");
  Header("Expires: 0");
  flush();

파일을 열어서 뿌려주면 그 내용을 다운로드 받는다.  
if ($fp = fopen("$downloadPath", "r")) {
       print fread($fp, filesize("$downloadPath"));
}
fclose($fp);

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요