파일 다운 부분 좀 봐주실분있나요?
본문
멀티로 다운받게끔하려는데 파일이 최상위만 받아지고 나머진 다운이 안받아져요 일단 소스부터 남길테니 좀 봐주실분있나요? 개별적으로 공부중입니다.
한글이름이포함되서 인코딩함수를 써서 했거든요. 디비상에서는 인코딩으로 가공하지 않고 그냥 넣었습니다. 이거랑 연관되어서 안되는건가요?
$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>';
}