파일을 올렸는데, 파일명에서 오류가 있어요 ㅠ..ㅠ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

파일을 올렸는데, 파일명에서 오류가 있어요 ㅠ..ㅠ 정보

파일을 올렸는데, 파일명에서 오류가 있어요 ㅠ..ㅠ

본문

파일을 올렸더니 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));
 
 
그래서 다운 받으려고 아래처럼 하니까 오류가 나와요.
 
/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");
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$filepath="$g4[path]/data/$file_dir/$file_server";
$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");
        // 4.00 대체
        // 서버부하를 줄이려면 print 나 echo 또는 while 문을 이용한 방법보다는 이방법이...
        //if (!fpassthru($fp)) {
        //    fclose($fp);
        //}
        while(!feof($fp)) {
            echo fread($fp, 100*1024);
            flush();
        }
        fclose ($fp);
        flush();
    } else {
        alert("해당 파일이나 경로가 존재하지 않습니다.");
    }
} else {
    alert("파일을 찾을 수 없습니다.");
}
?>

댓글 전체

다운링크를 직접 처리하시는건가요?
그러면 링크에있는 file_local 에 공백이 들어가면 안되죠.
링크거실때 file_local에 urlencode() 하시고 다운소스에서 file_local 에 urldecode() 하세요.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT