php를 이용해 zip파일 다운로드시 윈도 기본 압축 및 알집에서 제대로 열리지 않는 문제

 

 

php를 이용해 서버상의 파일을 다운로드 하도록 했을 때, 일반적인 파일을 여는데엔 문제가 없으나 zip 압축파일을 열 때 아래와 같은 오류와 함께 압축을 풀 수 없는 현상이 있습니다.


 특이한 점은  반디집 으로는 정상적으로 열리는데, 알집이나  윈도8이상의 기본 압축도구로는 열리지 않는 문제입니다.

php의 다운로드 소스는 대략 다음과 같습니다.

 

<?php
    function mb_basename($path) { return end(explode('/',$path)); }
    function utf2euc($str) { return iconv("UTF-8","euc-kr", $str); }
    function is_ie() {
        if(!isset($_SERVER['HTTP_USER_AGENT']))return false;
        if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) return true; // IE8
        if(strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false) return true; // IE11
        return false;
    }

    $fp = $_REQUEST['fp'];      // filename

    // 폴더명 지정
    $filepath = "/data/report/".$fp;
    $filesize = filesize($filepath);
    $filename = mb_basename($filepath);
    if( is_ie() ) $filename = utf2euc($filename);

    header("Pragma: public");
    header("Expires: 0");
    //header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: $filesize");

    readfile($filepath);
?>


문제가 되는 구문은 헤더 정의 부분에 있습니다. header("Content-Type: application/octet-stream"); 에서 octet-stream 을 사용하면 이와 같은 현상이 발생합니다.

여기서는 모든 파일 다운로드를 zip으로 제공했었기 때문에  위 구문을 주석처리 하는 것으로 간단히 해결 되었습니다만,

다른 확장자도 다운로드 해야 할 경우에는  파일이름에서 확장자를 확인해서 zip일 경우와 그렇지 않을 경우에 대해 Content-Type을 따로 지정해 주면 됩니다.


참고 URL : https://stackoverflow.com/questions/10681844/php-zip-file-download


이것때문에 대체 몇시간을 끙끙대고 있었던가 -_-

임의의 도메인을 생성해서 hosts 파일에 추가해놓고  개발테스트를 주로 한다.
나역시 내마음대로 abcd.co.kr 을 만들어 호스트 등록 해놓고 사이트를 올리는데...

잘 돌아가는 사이트를 통째로 폴더복사 해서  떠놓고 iis 간단히 셋팅해줬을 뿐인데
무슨이유에선지  로그인이 안된다.
계속 디버그 찍어봐도 DB커넥이고 글로벌변수고 잘 먹히는데
도대체가 request.cookie 만 먹통....

이유는? IE에서 hosts 사용시 session/cookie 정상동작을 안한다는 문제..
http://eclipse4j.tistory.com/44  님 감사합니다 ㅜ

이거 해결하고 자시고 할 필요도 없다
그냥 AUTH체크 include에  아이디와 권한변수를 상수값으로 박아넣어버리고 개발하면 된다
어차피 크로스브라우징 체크해야하니  크롬등 다른브라우저에서 로그인 테스트 해보면 된다.
실서버 포팅할때만 빼주면 된다

아 열받어

'Web Program' 카테고리의 다른 글

2011.07.22 CSS+JQuery를 이용한 드롭다운메뉴  (0) 2011.07.22


디자이너 요청에 의해 CSS를 이용한 드롭다운 메뉴를 만들어야 했다.
그것도 스르륵~ 내려오는 이펙트를 겸해서..

CSS만으로도 가능은 한것 같은데 ie가 안된다. 크로스브라우징이...
어찌 검색하다가 Jquery 라는걸 난생처음 알게되었다.
위대한 구글이 hoverIntent 플러그인까지 사용할 수 있게 도와주었다.
첨부파일은 hoverintent 플러그인 파일.



function overfunc() { $('div.the_menu').slideDown(500); }
function outfunc() { if(!$.hovering) { $('div.the_menu').slideUp(500); } }
hiConfig = {
        sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)
        interval: 200, // number = milliseconds for onMouseOver polling interval
        timeout: 200, // number = milliseconds delay before onMouseOut
        over: overfunc, // function = onMouseOver callback (REQUIRED)
        out: outfunc   // function = onMouseOver callback (REQUIRED)
}

$(document).ready(function () {
 $.hovering = false;
 $('img.menu_class').hoverIntent (hiConfig);
 
 $('div.the_menu').hover(
   function() {
    $.hovering = true;
   },
   function() {
    $.hovering = false;
    $('div.the_menu').slideUp(500);
   }
   );
   
});

 

이미지 객체에 마우스를 올리고 잠깐 딜레이 하면  div메뉴객체가 스르륵 드롭다운
div메뉴객체가 펼쳐지고 그 위에 마우스가 올려진 상황에서는 드롭다운 메뉴가 접히지 않음.

이미지 객체와 div메뉴객체에서 동시에 마우스가 out되면  드롭다운 메뉴가 슬라이드업

휴.... Jquery 첫입문작 치고는 뭐 나쁘지 않은것 같다.

'Web Program' 카테고리의 다른 글

hosts 설정해서 개발테스트 할때 Session 문제..  (0) 2012.01.06

+ Recent posts