파일 다운 부분 좀 봐주실분있나요? 채택완료

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

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

 

 

$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사용시 오류납니다.

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

개별창이라는게 윈도우오픈창 말한건가요?
@릴보이즈
윈도우오픈일수도 있고 iframe일수도 있겠죠
header는 flush되기전에만 유효하게 사용가능하기때문에
flush를 한후에 또하려면 새로운파일로혹은 새로운창에서 작동이되어야할겁니다.
감사합니다~

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고