Notice
Recent Posts
Recent Comments
rand(life)
제로보드4에서 다운로드 문제 해결 본문
제로보드4를 이용해서 게시판을 하나 만들었는데, 화일 다운로드가 제대로 안되는 문제가 생겼다. 파이어폭스에서는 다운로드는 되는데 파일명이 깨져나오고, IE에서는 ZIP 파일형태로 다운로드가 되는데 일단 다운 받았다가 열어보면 이상한 파일만 잔뜩있다. 주로 엑셀파일을 올렸을때 이런 문제가 발생한다.
원래 php같은건 잘 모르고 초보용 메뉴얼대로 따라하다가 어떻게 만든건데, 이런 문제가 생기면 아주 난감하다. 물어물어가다가 결국 답을 찾았다.
잊어버릴까봐 여기 적어둔다.
/bbs/ 아래에 download.php를 열어보면 다음과 같이 되어있다.
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) die();
/***************************************************************************
* 게시판 설정 체크
**************************************************************************/
// 사용권한 체크
if($setup[grant_view]<$member[level]&&!$is_admin) Error("사용권한이 없습니다","login.php?id=$id&page=$page&page_num=$page_num&category=$category&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&file=zboard.php");
// 현재글의 Download 수를 올림;;
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");
$data=mysql_fetch_array(mysql_query("select * from $t_board"."_$id where no='$no'"));
// 다운로드;;
$filename="file_name".$filenum;
header("location:$data[$filename]");
if($connect) {
@mysql_close($connect);
unset($connect);
}
?>
여기서 "// 다운로드;;" 아래 부분(빨간색글씨)을 다음과 같이 바꾼다.
$filename="file_name".$filenum;
$filename2="s_".$filename;
$filedir= $data[$filename];
$fileN= $data[$filename2];
$fileSize = filesize($filedir);
if(strstr($HTTP_USER_AGENT, "MSIE 5.5")) {
header("Content-Type: doesn/matter");
header("Content-Disposition: filename=$fileN");
header("Content-Transfer-Encoding: binary");
Header("Content-length: $fileSize");
header("Pragma: no-cache");
header("Expires: 0");
} else {
Header("Content-type: file/unknown");
Header("Content-Disposition: attachment; filename=$fileN");
Header("Content-Description: PHP3 Generated Data");
Header("Content-length: $fileSize");
header("Pragma: no-cache");
header("Expires: 0");
}
if (is_file("$filedir")) {
if($connect) {
@mysql_close($connect);
unset($connect);
}
readfile($filedir);
}
?>
왜 이렇게 하면 되는건지는 나도 모른다. 고수들이 알려주는 대로 할 뿐.... 제로보드를 원래 만든이가 지금은 XE라고 이름을 바꿔서 웹표준도 지키고 온라인 쇼핑몰도 운영할 수 있는 강력한 툴을 만들었다고 하는데, 감히 써 볼 엄두는 안나고, 팁공유 게시판에 들러서 문제 해결을 위한 팁이나 모으는 것 밖에는...
원래 php같은건 잘 모르고 초보용 메뉴얼대로 따라하다가 어떻게 만든건데, 이런 문제가 생기면 아주 난감하다. 물어물어가다가 결국 답을 찾았다.
잊어버릴까봐 여기 적어둔다.
/bbs/ 아래에 download.php를 열어보면 다음과 같이 되어있다.
<?
/***************************************************************************
* 공통 파일 include
**************************************************************************/
include "_head.php";
if(!eregi($HTTP_HOST,$HTTP_REFERER)) die();
/***************************************************************************
* 게시판 설정 체크
**************************************************************************/
// 사용권한 체크
if($setup[grant_view]<$member[level]&&!$is_admin) Error("사용권한이 없습니다","login.php?id=$id&page=$page&page_num=$page_num&category=$category&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&file=zboard.php");
// 현재글의 Download 수를 올림;;
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");
$data=mysql_fetch_array(mysql_query("select * from $t_board"."_$id where no='$no'"));
// 다운로드;;
$filename="file_name".$filenum;
header("location:$data[$filename]");
if($connect) {
@mysql_close($connect);
unset($connect);
}
?>
여기서 "// 다운로드;;" 아래 부분(빨간색글씨)을 다음과 같이 바꾼다.
$filename="file_name".$filenum;
$filename2="s_".$filename;
$filedir= $data[$filename];
$fileN= $data[$filename2];
$fileSize = filesize($filedir);
if(strstr($HTTP_USER_AGENT, "MSIE 5.5")) {
header("Content-Type: doesn/matter");
header("Content-Disposition: filename=$fileN");
header("Content-Transfer-Encoding: binary");
Header("Content-length: $fileSize");
header("Pragma: no-cache");
header("Expires: 0");
} else {
Header("Content-type: file/unknown");
Header("Content-Disposition: attachment; filename=$fileN");
Header("Content-Description: PHP3 Generated Data");
Header("Content-length: $fileSize");
header("Pragma: no-cache");
header("Expires: 0");
}
if (is_file("$filedir")) {
if($connect) {
@mysql_close($connect);
unset($connect);
}
readfile($filedir);
}
?>
왜 이렇게 하면 되는건지는 나도 모른다. 고수들이 알려주는 대로 할 뿐.... 제로보드를 원래 만든이가 지금은 XE라고 이름을 바꿔서 웹표준도 지키고 온라인 쇼핑몰도 운영할 수 있는 강력한 툴을 만들었다고 하는데, 감히 써 볼 엄두는 안나고, 팁공유 게시판에 들러서 문제 해결을 위한 팁이나 모으는 것 밖에는...