반응형
php 파일업로드

오늘은 php 파일업로드에 관해서 쓰려한다.
사실 본인이.. 가끔 만들때 깜빡깜빡해서 참고하려는 자료이다. ㅎㅎ

자.. 일단 첫 html에서 확인해야될 사항.
form 속성에 enctype="multipart/form-data" <-- 이것이다. 이거 빼먹으면 오류난다.
<form name='frm1' method='post' enctype="multipart/form-data" action='xxx.php'>
잊지 말자.
그리고 다중 업로드와 단일 업로드가 있지만.스크립트로 만들어주면 그리 크게 힘들지는 않을것이다.(사실 스크립트가 더 어려운거 같다.. ㅠ_ㅠ)
나중에 스크립트는 따로 올리겠다..

자.. 이제 우리에게 가장 익숙한 html 테그이다.
input 태크 type='file' 를 하면 다른 사이트에서 업로드 할때 보이던것과 매우 흡사하다. ㅋ(아닐수도 있구요.. 방법이 워낙많아서..)
일단 기본으로 가는것이 가장 하기 편하겠다.
<input name='f_0' type='file'> 보기 않좋아도 어쩔수 없다.. ㅠㅠ 그리고 크기는 style속성으로 줄수 있다. ex) style='width:300px;'

이렇게 입력을 하고 php로 넘어가겠다.(솔찍히 너무 잡다한 말을 쓰네요.. -_-;;)

php에서 넘겨준 f_0값을 받자.
$f_0 <-- 이렇게만 해도 받는다.
일단 파일이 들어온 유무를 확인하자.
if ($f_0!=""){}
위와같이 하면 f_0값이 null이 아니면 if구문 안에 있는 구문을 실행을 할것이다.
자 그리고 우리가 해야될것은 php에 있는 함수로 확인을 하는 작업이다. 다들 알고 있는 함수일것이다.
is_uploaded_file($f_0) 이렇게하면 파일이 HTTP POST를 통해 업로드 된것인지 아닌지 알려줍니다. 사실인경우 TRUE 그리고 파일의 존제유무. file_exists()로 동일한 명의 파일이 있는지 확인후 있다면 현제 파일의 파일명을 변경시켜줍니다.

그리고 파일의 명과 사이즈가져오는것을 잊었네요.
$userfile_name=$_FILES['f_0']['name'];
$userfile_size=$_FILES['f_0']['size'];

이렇게 하면 파일명과 사이즈를 가져올수 있습니다.
그리고 중간은 과감히 빼겠습니다.

move_uploaded_file() 이녀석이 이제 파일을 실제로 디스크에 써주는 녀석입니다. move_uploaded_file($f_0,'경로포함된 파일명') 이렇게 해주면 파일이 업로드가 됩니다.
되도록이면 보여주는것이 좋으니 if(!move_uploaded_file()){} 해주는것이 좋겠지요.


ex)
php_upload.html
<html>
<body>
<form name='frm1' method='post' enctype="multipart/form-data" action='php_upload.php'>
<input name='f_0' type='file'>
</form>
</body>
</html>

php_upload.php
//파일업로드
if($f_0!=""){
  if(is_uploaded_file($f_0)){
    if($Files[0]!=""){
     if(file_exists("경로".$Files[0])) {
        @unlink("경로".$Files[0]);// 여기서는 귀찮아서 지움.
      }  
    }
   $userfile_name=$_FILES['f_0']['name'];
   $userfile_size=$_FILES['f_0']['size'];

   $maxsize=3*1024*1024;//3MB 용량 제한

    if($userfile_size>=$maxsize){
      echo "<script>alert('파일용량이 초과되었습니다.'); history.back(-1);</script>"; 
      exit;
    }
    $upfile =explode(".",$userfile_name);
    $fname=str_replace('/','',$upfile[0]);
    $file_name=$fname."_".$number.".".$upfile[1];

    if (!move_uploaded_file($f_0,"경로/$file_name" )) {
      echo("<script>alert('파일업로드를 실패하였습니다');history.go(-1);</script>");
      exit;
    }
} else {
    echo "<script>alert('정상적인 업로드 방식이 아닙니다');history.go(-1);</script>";
    exit; 
 }
반응형

+ Recent posts