파일을 올렸는데, 파일명에서 오류가 있어요 ㅠ..ㅠ 정보
파일을 올렸는데, 파일명에서 오류가 있어요 ㅠ..ㅠ본문
파일을 올렸더니 space가 있는 경우 파일명에 + 라는 특수문자가 들어가네요.
당연히 db에 저장하는 파일명에도 +라는 문자가 들어가요.
파일명은 그냥 기본으로 썼어요.
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$file_name0 = $_FILES[memo_file][name];
$file_name1 = intval($me_id) . "_" . preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $file_name0);
$file_name2 = str_replace('%', '', urlencode($file_name1));
$file_name0 = $_FILES[memo_file][name];
$file_name1 = intval($me_id) . "_" . preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $file_name0);
$file_name2 = str_replace('%', '', urlencode($file_name1));
그래서 다운 받으려고 아래처럼 하니까 오류가 나와요.
/bbs/download_file.php?file_server=echo4me/411882_C7C7C7C3BED8C0E2+M26A+C1A4B8AE.ppt&file_local=피플앤잡 M&A 정리.ppt&file_dir=memo2
직접 파일주소를 주니까 잘 되네요. ㅠ..ㅠ
/data/memo2/echo4me/411882_C7C7C7C3BED8C0E2+M26A+C1A4B8AE.ppt
결국 프로그램 오류인가요???
그런 생각이 들어서 프로그램 4번째 줄의 filepath를 찍어보니까 값이 ...
+는 없어지고 space로 바뀌었어요. 허걱... db에는 +로, 실제 파일명도 +인데...
왜 이럴까요???
/data/memo2/echo4me/411882_C7C7C7C3BED8C0E2 M26A C1A4B8AE.ppt
<?
include_once("./_common.php");
include_once("./_common.php");
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$filepath="$g4[path]/data/$file_dir/$file_server";
$original="$file_local";
$original="$file_local";
if (file_exists($filepath)) {
if(eregi("msie", $_SERVER[HTTP_USER_AGENT]) && eregi("5\.5", $_SERVER[HTTP_USER_AGENT])) {
header("content-type: doesn/matter");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-transfer-encoding: binary");
} else {
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-description: php generated data");
}
header("pragma: no-cache");
header("expires: 0");
flush();
if (is_file("$filepath")) {
$fp = fopen("$filepath", "rb");
$fp = fopen("$filepath", "rb");
// 4.00 대체
// 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
//if (!fpassthru($fp)) {
// fclose($fp);
//}
// 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
//if (!fpassthru($fp)) {
// fclose($fp);
//}
while(!feof($fp)) {
echo fread($fp, 100*1024);
flush();
}
fclose ($fp);
flush();
} else {
alert("해당 파일이나 경로가 존재하지 않습니다.");
}
echo fread($fp, 100*1024);
flush();
}
fclose ($fp);
flush();
} else {
alert("해당 파일이나 경로가 존재하지 않습니다.");
}
} else {
alert("파일을 찾을 수 없습니다.");
}
?>
alert("파일을 찾을 수 없습니다.");
}
?>
댓글 전체
다운링크를 직접 처리하시는건가요?
그러면 링크에있는 file_local 에 공백이 들어가면 안되죠.
링크거실때 file_local에 urlencode() 하시고 다운소스에서 file_local 에 urldecode() 하세요.
그러면 링크에있는 file_local 에 공백이 들어가면 안되죠.
링크거실때 file_local에 urlencode() 하시고 다운소스에서 file_local 에 urldecode() 하세요.
^^ 감사합니다.
코드를 그누보드 download.php 스타일로 아예 다 수정했어요.
$file_local 같은 것이 인자로 넘어가지 않게요.
코드를 그누보드 download.php 스타일로 아예 다 수정했어요.
$file_local 같은 것이 인자로 넘어가지 않게요.