[PHP]파일 업로드 예제(Class 활용)

2012. 4. 25. 12:42NOTE/IT

phpschool.com 의  - 박상용님의 소스 -


파일 업로드 예제(Class 활용)


파일 업로드하면서 여러가지 체크를 하게되죠?

클래스로 묶어 보았습니다.

upload.php의 상단 클래스 정의 부분을 require 시켜서 사용하시면 다른 페

이지에도 쉽게 사용하실 것 같고요.

linux,apache와 win2000,apache, win2000,iis에서 테스트를 해보았습니다.

초보자 분들께서 보시면 유용할 듯 싶네요.

굳이 클래스 내부에 포함하지 않아도 될 것도 있었으나 일반적인 파일업

로드에 쓰이는 부분들이라 포함시켜보았습니다.

비효율적인 부분이 있으면 지적해주세요. 자꾸 수정해야 좋은 소스가 나오

는 것 아니겠습니까? ^^

그럼 20000.


// # upfile.htm
-----------------------------------------------------------------
<HTML>

<HEAD>

<TITLE>파일 업로드 테스트</TITLE>

</HEAD>

<BODY>

<FORM NAME="upFileForm" METHOD="post" ENCTYPE="multipart/form-data" ACTION="upload.php">

<INPUT TYPE="file" NAME="upfile"> <INPUT TYPE="submit" VALUE="전송">

</FORM>

</BODY>

</HTML>
-----------------------------------------------------------------


// # upload.php
-----------------------------------------------------------------
<?
// # 파일 업로드 클래스
    class upload{
        var $file;        // ' 업로드 파일
        var $upload_path;    // ' 파일을 저장할 경로
        var $file_size;        // ' 파일 크기
        var $file_name;        // ' 파일의 이름
        var $file_front_name;    // ' 확장명을 제외한 이름
        var $file_ext_name;    // ' 파일의 확장자
        
        
        // # 클래스 초기화
        // ' $up_file        : 업로드 파일
        // ' $up_file_name    : 업로드 파일의 이름
        // ' $up_file_size    : 업로드 파일의 크기
        // ' $up_save_path    : 업로드할 경로
        function init($up_file,$up_file_name,$up_file_size,$up_save_path){
            $this->file        = $up_file;
            $this->upload_path    = $up_save_path;
            $this->file_name    = $up_file_name;
            $this->file_size    = $up_file_size;

            // ' 파일의 확장자와 이름을 구분한다.
            $this->file_front_name    = $this->cutFileName("name");    // ' 확장자를 제외한 이름
            $this->file_ext_name    = $this->cutFileName("ext");    // ' 파일의 확장자

        }
        

        // # 파일 이름 구분 함수
        // ' $mode="ext"    : 확장자명을 반환해 준다.
        // ' $mode="name"    : 확장자를 제외한 이름을 반환해준다.
        function cutFileName($mode){
            $len = strlen($this->file_name);
            $dot = strpos($this->file_name,".");

            if($mode == "ext"){
                return substr($this->file_name,$dot+1,$len);
            }
            else if($mode == "name"){
                return substr($this->file_name,0,$dot);
            }
        }

        
        // # 파일의 크기를 제한하는 함수
        // ' $limit_size : 제한할 크기(1024*2000 = 2MB)
        function limitSize($limit_size){
            if($this->file_size > $limit_size){
                return false;
            }
            else{
                return true;
            }
        }


        // # 확장자 제한 함수
        // ' $exmode="normal"    : 프로그램 파일 업로드 금지때
        // ' $exmode="img"    : 이미지만 업로드 시킬때
        function limitExt($exmode){
            if($exmode == "normal"){
                if($this->file_ext_name == "php" || $this->file_ext_name == "php4" || $this->file_ext_name == "shtml" || $this->file_ext_name == "cgi"){
                    return false;
                }
                else{
                    return true;
                }
            }
            else if($exmode == "img"){
                if($this->file_ext_name == "gif" || $this->file_ext_name == "jpg"){
                    return true;
                }
                else{
                    return false;
                }
            }
        }


        // ' 파일 중복 체크후 새로운 이름 반환 함수
        // ' $smode = "d" : "날짜형으로 파일이름 반환
        // ' $smode = "c" : "파일이름_숫자"형으로 파일이름 반환        
        function getSaveName($smode){
            if($smode == "d"){
                $date = getdate();
                $str_name = $date['year'].$date['month'].$date['mday'].$date['hours'].$date['minutes'].$date['seconds'].".".$this->file_ext_name;

                return $str_name;
            }
            else if($smode == "c"){
                $i = 1;
                $str_name = $this->file_name;
                while(file_exists($this->upload_path.$str_name)){
                    $str_name = $this->file_front_name."_".$i.".".$this->file_ext_name;
                    $i++;
                }

                return $str_name;
            }
        }


        // # 파일 저장 함수
        // ' $save_file_name: 저장할 이름
        function fileSave($save_file_name){
            copy("$this->file",$this->upload_path.$save_file_name);
            unlink("$this->file");
        }


    }



// ' 클래스 사용하기
//$path = "/home6/yhcine/public_html/pop_up/pop_upload/";    // ' Linux
$path = "c:homepds";                    // ' Window

$clsUpload = new upload;                    // ' Instance 생성
$clsUpload->init($upfile,$upfile_name,$upfile_size,$path);    // ' 클래스 초기화
if(!$clsUpload->limitSize(1024*2000)) exit;            // ' 용량제한 체크
if(!$clsUpload->limitExt("normal"))      exit;            // ' 확장자 체크
$sName = $clsUpload->getSaveName("d");                // ' 저장명 받아오기
$clsUpload->fileSave($sName);                    // ' 파일 저장

?>
-----------------------------------------------------------------

'NOTE > IT' 카테고리의 다른 글

[JAVA SCRIPT] 이벤트  (0) 2012.04.25
[HTML] 웹 폰트 적용  (0) 2012.04.25
[PHP] 기초 문법 정리  (0) 2012.04.25
[HTML] 디자인 테이블 소스  (0) 2012.04.25
엑셀(EXCEL) 메크로  (0) 2012.04.25