테스트 사이트 - 개발 중인 베타 버전입니다

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

릴보이즈 7년 전 조회 1,798

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

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

 

 

$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 '';         }

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

답변 1개

플래토
7년 전

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

header사용시 오류납니다.

 

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

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

답변에 대한 댓글 3개

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

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

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

로그인