ITmembers.net 아카이브 · 2002–2009

질문과 답변

[re] php파일업로드기능에문제가있는듯합니다..

금지파일을 거르는 부분에는 문제가 없네요.

    if(!strcmp($extension,"html") ||
       !strcmp($extension,"htm") ||
       !strcmp($extension,"php") ||      
       !strcmp($extension,"inc"))
    {
       $msg = "업로드가 금지된 파일입니다.";
    }

strcmp 함수는 첫번째인자와 두번째 인자가 동일하면 0 을 리턴합니다.
그럼 확장자가 html or htm or php or inc 인 경우 0 이 리턴되겠죠.
그런데 앞에 !(not) 이 붙어있으니 참이 되죠.

따라서 경고창으로 "업로드가 금지된 파일입니다." 라고 뜰껍니다.
소스를 보니 문제가 경고창은 뜨는데 업로드는 된다는 거네요.

저 코딩라인 아래쪽에 보면 파일을 업로드하는 부분이 있습니다.

// 지정된 디렉토리에 파일 저장하는 부분
    if(!copy($upfile,$target)) {   // false일 경우
       $msg = "파일 저장 실패";
    }

// 임시 파일을 삭제하는 부분
    if(!unlink($upfile)) { // false일 경우
       $msg = "임시 파일 삭제 실패";
    }

이 부분인데요. 위에서 금지파일을 검사하는 조건문과 파일업로드 하는
조건문이 분리되어 있죠? 그래서 경고창은 경고창대로 뜨고 업로드는
되는 겁니다.

단순히 해결하는 방법은 조건문을 하나로 묶어주는 겁니다.
현재 DJ보드의 파일을 업로드하는 부분을 보면...

금지 파일여부 확인
파일 중복여부 확인
파일 업로드
임시파일 삭제

이런 순서로 되어 있습니다. (현재는 다 단독 조건문으로 되어있죠.)
이걸 하나로 묶는겁니다.

if(금지파일여부 참){
  $msg="금지파일";
}else{
  if(파일중복 참){
    $msg="파일중복";
  }else{
    if(파일업로드 실패){
      $msg="업로드실패";
    }
    if(임시파일 삭제실패){
      $msg="임시파일 삭제실패";
    }
  }
}

이런식으로 우선 금지파일여부를 체크하고 금지파일이 아닐경우(첫번째 else)에
파일중복체크!! 중복되지도 않았을 경우(두번째 else)에 파일을 업로드하면 되겠죠.

소스만 훑어본거라 맞는지는 모르겠습니다 .해보시고 안되면 다시 질문해주세요~!!

>파일업로드를테스트해보니 문제가있어 질문을드림니다
> up라는폴더를만들고 파일업로드를하면
>그러니까 금지된파일을업로드해도 up폴더에 내용이업로드되더군요;;
>그문제는 어떻게해결해야할지요..
>
>아래와같습니다 참조부탁드림니다
>if(   조건식   )
>  {
>if문의형식이 틀린게아닌지요?
>두변수의 값을 || 연산해서 그값을 비교하여 실행하는것인데..
>어떻게해결하면 금지파일이 up폴더에 저장이되지않을까요?
>   $filename = explode(".", $upfile_name);
>    $extension = $filename[sizeof($filename)-1];
>         
>    if(!strcmp($extension,"html") ||
>       !strcmp($extension,"htm") ||
>       !strcmp($extension,"php") ||  
>            

댓글 4