파일 다운 부분 좀 봐주실분있나요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
파일 다운 부분 좀 봐주실분있나요?

QA

파일 다운 부분 좀 봐주실분있나요?

본문

멀티로 다운받게끔하려는데 파일이 최상위만 받아지고 나머진 다운이 안받아져요 일단 소스부터 남길테니 좀 봐주실분있나요? 개별적으로 공부중입니다. 

한글이름이포함되서 인코딩함수를 써서 했거든요. 디비상에서는 인코딩으로 가공하지 않고 그냥 넣었습니다. 이거랑 연관되어서 안되는건가요?

 

 

$id = (int)$_REQUEST['fileid'];
    $filelist = array();
    $file_sql=mysqli_query($conn,"SELECT * FROM fileuploads WHERE pageid = '$id' GROUP BY filetime, no DESC");
    while($filerow=mysqli_fetch_array($file_sql)) {
      $filelist[] = $filerow;
    }

    foreach($filelist as $key => $row) {

        $pullname = $row['filepath'].urlencode($row['filename']);
        if(file_exists($pullname)){

          if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT)){
             set_time_limit(0);
             Header("Content-type: application/octet-stream");
             Header("Content-Length: ".filesize($pullname)); //다운로드 게이지를 나타냅니다.
             Header("Content-Disposition: attachment; filename=".$pullname); //파일을 무조건 다운로드 합니다.
             Header("Content-Transfer-Encoding: binary");
             Header("Pragma: no-cache");
             Header("Cache-Control: cache, must-revalidate"); //다운로드 확인창에서 다운로드 하지 않고 바로 열 수 있습니다.
             Header("Expires: 0");
             ob_clean();
             flush();
             readfile($pullname);
          } else {
            set_time_limit(0);
            header('Connection: Keep-Alive');
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($pullname).'"');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($pullname));
            ob_clean();
            flush();
            readfile($pullname);
          }


          $fp = fopen($pullname, "r");
          if(!fpassthru($fp)) fclose($fp);
        } else {
          echo '<script type="text/javascript">alert("해당 파일이 존재하지 않습니다.");history.back();</script>';
        }

이 질문에 댓글 쓰기 :

답변 1

flush를 클라이언트로 전송하면

header사용시 오류납니다.

 

멀티로 처리시에 순환돌면서 개별창으로 호출을 시키는게 중요하지 않을까 싶습니다.


윈도우오픈일수도 있고 iframe일수도 있겠죠
header는 flush되기전에만 유효하게 사용가능하기때문에
flush를 한후에 또하려면 새로운파일로혹은 새로운창에서 작동이되어야할겁니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 1,041
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT