Html & Script

다운로드에 관한 1원짜리팁

페이지 정보

본문

<?
    session_start();
       
.... 중략.....(사용자 다운로드 권한체크등...)

        if (eregi("(MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT)) {
            Header("Content-type:application/octet-stream");
            Header("Content-Length:".filesize($Path));
            Header("Content-Disposition:attachment;filename=".$user_file);
            Header("Content-Transfer-Encoding:binary");
            Header("Pragma:no-cache");
            Header("Expires:0");
        } else {
            Header("Content-type:file/unknown");
            Header("Content-Length:".filesize($Path));
            Header("Content-Disposition:attachment; filename=".$user_file);
            Header("Content-Description:PHP3 Generated Data");
            Header("Pragma: no-cache");
            Header("Expires: 0");
        }

        if (is_file($Path)) {
            $fp = fopen($Path, "rb");
            if (!fpassthru($fp)) fclose($fp);
            clearstatcache();
        } else {
            echo "해당 파일이나 경로가 존재하지 않습니다.";
        }
?>

대부분 위와 같이형식으로 사용할껍니다.
위의 경우 문제점은 hwp, xls등 파일열기를 하면 제대로 열리지가 않죠..
(아파치의 설정변경으로 가능한걸로 알고 있습니다)
session_start();을 빼면 파일열기가 되지만 그렇다고해서 session_start(); 를 안쓸수도 없고

그래서 Header("Location:경로/파일명") 로 다운하시는 분들도 있고...
이경우의 문제점은 익스에서 바로 출력되는 문제가있죠. 한글파일명일때도 문제가 있고...

해결책
위소스에서 session_start(); 아래에 header("Cache-control: private");  를 추가해주시면 모두 해결됩니다. 간단하죠?
이상 1원짜리팁이였습니다...

관련자료

등록된 댓글이 없습니다.
Today's proverb
위대한 일을 성취하는 사람은 위대한 고통을 느끼는 사람이다. 고통의 해결은 고통의 감지에서 시작되고, 위대한 고통은 그것을 해결함으로써 인간의 자부심을 드높일 수 있는 위대한 문제이기 때문이다. 따라서 우리는 역설적으로 이렇게 말할 수 있다. 위대한 고통 때문에 아파하는 사람은 축복을 받았다고…. (김광수의 《둥근 사각형의 꿈》중에서)