>백엔드 개발 >PHP 튜토리얼 >thinkphp 파일 업로드 클래스

thinkphp 파일 업로드 클래스

WBOY
WBOY원래의
2016-08-08 09:31:411058검색

/**
*파일 업로드 클래스로 업로드된 파일, 사진 등을 처리하는 데 사용되며 자동으로 썸네일 생성 및 워터마크 추가가 가능합니다
*/
// +--------------- --- ---------------------------------- ---
// | ThinkPHP [ 생각만 하면 할 수 있어요 ]
// +------------ --------------- --------
// | Copyright (c) 2009 http://thinkphp.cn All Rights Reserved.
// +---------- ---------------- ----------------------------------
// | 라이선스 있음( http://www.apache.org/licenses /LICENSE-2.0 )
// +--------- ------------ ------------ ---------
// | 작성자: hxsml
// +------ --------- ---------------------------- ---
// $ Id: UploadFile.class.php v1.0
/**
+---------------------------------- --- -------------------
* 파일업로드 수업
*
* 수정:
* 여러 파일을 업로드할 때 fileinfo는 양식 이름을 키 배열로 사용합니다
+------------------------- -------- ---------------------------
* @category ORG
* @package ORG
* @subpackage Net
* @author hxsml
* @version v1.0
+------------ - ------------------------------------------------- - -----------------
*/
class UploadFile {/ /클래스 정의 시작
// 업로드된 파일의 최대 크기
public $maxSize = -1;
// 다중 파일 업로드 지원 여부
public $supportMulti = true;
// 파일 접미사 업로드 허용
// 공백으로 두고 접미사를 확인하지 않음
public $allowExts = array();
// 업로드가 허용되는 파일 형식
// 비워두고 선택하지 마세요
public $allowTypes = array();
// 업로드된 이미지에 썸네일 처리 사용
public $thumb = false;
// 갤러리 클래스 패키지 경로
public $imageClassPath = 'ORG.Util.Image' ;
// 최대 썸네일 너비
public $thumbMaxWidth;
// 최대 썸네일 높이
public $thumbMaxHeight;
// 썸네일 접두사
public $thumbPrefix = 'thumb_ ';
public $thumbSuffix = '';
// 썸네일 저장 경로
public $thumbPath = '';
// 썸네일 파일명
public $thumbFile='';
// 원본 이미지 삭제 여부
public $thumbRemoveOrigin = false;
// 압축된 이미지 파일 업로드
public $zipImages = false;
// 파일 저장을 위해 하위 디렉터리 활성화
public $autoSub = false;
// 해시 날짜를 사용하여 하위 디렉터리를 생성할 수 있습니다
public $subType = 'hash';
public $dateFormat = ' Ymd';
public $hashLevel = 1; // 해시의 디렉터리 수준
// 업로드 파일 저장 경로
public $savePath = '';
public $autoCheck = true; // 자동 여부 첨부 파일 확인
// 같은 이름이 존재하는지 덮어쓰기
public $uploadReplace = false;
// 파일 명명 규칙 업로드
// 예를 들어 시간 uniqid com_create_guid 등이 될 수 있습니다.
// 불필요해야 합니다. 모든 매개변수의 함수 이름은 사용자 정의 함수를 사용할 수 있습니다
public $saveRule = '';
// 파일 업로드 해시 규칙 함수 이름
// 예를 들어 md5_file sha1_file 등이 될 수 있습니다.
public $hashType = 'md5_file ';
// 오류 메시지
private $error = '';
// 업로드 성공 파일 정보
private $uploadFileInfo ;
/**
+---------------------------------- -- ------------
* 건축적 기능
+------------- -- ---------------------
* @access public
+--- ------ ------------------ ------
*/
공용 함수 __construct($maxSize='',$allowExts='',$allowTypes='',$savePath='',$saveRule='') {
if(!empty( $ maxsize) && is_numeric ($ maxsize) {
$ this- & gt; maxsize = $ maxsize;
}
if (!Empty ($ Allowexts)) {
if (is_array $ Allowexts ;else {
                $this->allowExts =explod(',',strtolower($allowExts));
            }
        }
        if(!empty($allowTypes)) {
           만약 (is_array($allowTypes)) {
                $this->allowTypes = array_map('strtolower',$allowTypes);
            }else {
                $this->allowTypes = 폭발(',', strtolower($allowTypes));
            }
        }
        if(!empty($saveRule)) {
            $this->saveRule = $saveRule;
        }el 그렇죠{
$this->saveRule=C('UPLOAD_FILE_RULE');
        }
        $this->savePath = $savePath;
    }
/**
+---------------------------------- -- ------------
* 파일 업로드
+------------ -- ---------------------
* @access public
+--- ----- ------------------- -----
* @param 혼합 $name 데이터
* @param string $value 데이터 테이블 이름
+------ ----- ---------------------
* @return 문자열
+ ----- ------------------- ----- ---
* @throws ThinkExecption
+------------------ ---- ----------
*/
    비공개 함수 save($file) {
        $filename = $file['savepath'].$file['savename'];
        if(!$this- >uploadReplace && is_file($filename)) {
            // 不覆盖同name文件
            $this->error='文件已经存재!'.$ filename;
            return false;
        }
        // 如果是图image文件 检测文件格式
        if( in_array(strtolower($file['extension']),ar 레이('gif','jpg ','jpeg','bmp','png','swf')) && false === getimagesize($file['tmp_name'])) {
            $this->error = '비법图image文件';
            return false;
        }
        if(!move_uploaded_file($file['tmp_name'], $this->auto_charset($filename,'utf-8','gbk'))) {
            $this->error = '文件上传保存错误!';
            return false;
        }
        if($this->thumb && in_array(strtolower($file['extension']),array('gif','jpg','jpeg' ,'bmp','png'))) {
            $image =  getimagesize($filename);
            if(false !== $image) {
                //是图image文件生成缩略图
                $thumbWidth=explode(',',$this->thumbMaxWidth);
                $thumbHeight= 폭발( ',',$this->thumbMaxHeight);
                $thumbPrefix=explode(',',$this->thumbPrefix);
                $thumbSuffix = explode(',',$this->thumbSuffix);
                $thumbFile=explode(',',$this->thumbFile);
                $ ThumbPath    =  $this->thumbPath?$this->thumbPath:$file['savepath'];
                // 生成图image缩略图
                import($this->imageClassPath);
               $ realFilename  =  $this->autoSub?basename($file['savename']):$file['savename'];
                for($i=0,$len=count($thumbWidth); $i< $len; $i++) {
                    $thumbname=$thumbPath.$thumbPrefix[$i].substr($realFilename,0,strrpos($realFilename, '.' )).$thumbSuffix[$i].'.'.$file['extension'];
                    Image::thumb($filename,$thumbname,'',$thumbWidth[$i],$thumbHeight[$ i],true);
                }
                if($this->thumbRemoveOrigin) {
                    // 生成缩略图之后删除原图
                    연결 해제($filename);
                }
            }
        }
        if($this->zipImags) {
            // TODO 对图文压缩包在线解压
        }
        true를 반환합니다.
    }
    /* *
+---------------------------------- -- ------------
* 모든 파일 업로드
+------------ - --------------------
* @access public
+---- ---- -------------------- ----
* @param string $savePath 업로드 파일 저장 경로
+--------------- ----- -------------
* @return 문자열
+--------- ------ ------------------ ------
* @throws ThinkExecption
+-------------------- --------------- -------------
*/
    공개 함수 업로드($savePath ='') {
        //如果不指定保存文件name 则由系统默认
        if(empty($savePath))
정의 🎜>            if(is_dir(base64_decode ($savePath))) {
                $savePath

=

base64_decode($savePath);            }else{                //创建目录                if( !mkdir($savePath)){                    $this->error  =  '上传目录'.$savePath.'不存재';
                    false를 반환합니다.
               }
            }
        }else {
                                                                                                                                                 }
} }
          $fileInfo = array();
            $isUpload   = false;
                 🎜>=

$this->dealFiles($_FILES ); (!empty($file['name'])) {
                                                                                                              $this->getExt($file['name']);
$file['savepath'] = $savePath;
$file['savename'] = $this->getSaveName($file );                                                             false 반환;                                                                                         $fun = $this->hashType; $file[' hash'] = $fun($this->auto_charset($file['savepath'].$file['savename'],'utf-8', 'gbk'))
}
/ / 업로드가 성공한 후 다른 곳에서 호출할 수 있도록 파일 정보를 저장합니다.
unset ($ file ['tmp_name'], $ file ['error'])
$fileInfo[$key] = $file;
$isUpload = true;
}
}
if($isUpload) {
$this->uploadFileInfo = $fileInfo;
               return true;
/**
+---------------------------------- -- ------------
* 단일 업로드 필드에 파일을 업로드하면 다중 첨부가 지원됩니다
+------ -- ---------------------
* @access public
+- -------------------------- ----------- -------
* @param array $file 업로드 파일 정보
* @param string $savePath 업로드 파일 저장 경로
+--- ---------- -------------- ----------
* @return 문자열
+---------------- ------ -------------
* @throws ThinkExecption
+--------- ------ ------------------ -
*/
public function uploadOne($file,$savePath=''){
//저장 파일 이름을 지정하지 않으면 시스템 기본값이
if( 비어 있음($savePath))
$savePath = $this->savePath;
if(!mk_dir($savePath)){
                                                                                                    $this->오류               }그밖에 {
                                    ~                                          ​}
}
                                                                             )) {
$keys = array_keys($file);
$count

=

count($file['name']);
for ($ i=0; $i foreach ($keys as $key)

                                            > $file ; = $savepath; > if(!$this->check($file))
                                                                                            >save($file)) return false;
if(function_exists($this->hashType) ) {
$fun = $this->hashType;
$file['hash'] = $ fun($this-> auto_charset($file['savepath'].$file['savename' ],'utf-8','gbk'));               }
                                                                                                                                Return $ info;
} else {
$ this-& gt; error = '파일 업로드를 선택하지 않았습니다.'
return false; $fContents, $from='gbk', $to='utf-8') {
$from = strtoupper($from) == 'UTF8' ? 'utf- 8': $ From; TO = Strtoupper ($ To) ==' UTF8 '?' UTF-8 ': $ To;
If ($ From) === Strtoupper ($ To) || 비어 있음($fContents) $fContents) && !is_string($fContents))) {
                                                                            >
IF (IS_STRING ($ FCONTENTS)) {
If (Function_exists ('MB_CONVERT_ENCODING')) {
MB_CONVERT_ENCODING 반환($ 글꼴, $ TO, $ FROM);
} elseif (Function_exists ('iconv')) {
                  return iconv($from, $to, $fContents) } elseif (is_array($fContents )); 🎜> foreach ($fContents as $key => $val) {
$_key = $this->auto_charset($key, $from, $to);
$fContents[$ _key] = $ this->auto_charset ($val, $from, $to); 🎜>                                                                            | foreach ($files as $field => $file){
if(is_array($file['name'])) {
                  $keys = array_keys($file); ; $ i ++) {
Foreach($ 키를 $ 키로)
$ Filearray [$ 필드] [$ Key] = $ FILE [$ Key] [$
}
}else{
            $fileArray[$field] = $file;
              }
                                                        
/**
+---------------------------------- -- ------------
* 오류 코드 정보 가져오기
+------------ -- -------------------
* @access public
+------ -- ------------------------------------------------ -- -
* @param string $errorNo 오류 번호
+-------------------------------- -- -------------
* @return void
+------------ ---- ----------------
* @throws ThinkExecution
+------------------------------- ----- ------------
*/
보호된 함수 error($errorNo) {
switch($errorNo) {
사례 1:
$this->error = '업로드됨 파일이 php.ini의 upload_max_filesize 옵션 제한을 초과합니다'; ';
                                                                                                                                                  사례 4:
$this-> error = '파일이 업로드되지 않았습니다.';
break;
사례 6:
$this->error = '임시 폴더를 찾을 수 없습니다';
사례 7:
               $this->error = '파일 쓰기 실패';
                  break;';
}
return ;
}
/**
+---------------------------------- -- ------------
* 업로드된 파일 명명 규칙에 따라 저장된 파일명을 가져옵니다
+---------------- ----- --------------
* @ 비공개 액세스
+-- ----------------------------- -------- ------
* @param string $filename 데이터
+--------- ----------- ---------------
* @return 문자열
+ ----------- -------------------------- -----------
*/
비공개 함수 getSaveName($filename) {
$rule = $this->saveRule;

if(empty($rule)) {//이름 지정 규칙이 정의되지 않은 경우 파일 이름을 변경하지 않고 유지
//$saveName = $filename['name'] ;
$saveName = date('YmdHis').rand().".".$filename['extension'];
        }else{
> > ~ > >      사용 사용       끝까지 through out through out through out through out through through off       through '     through       through through '''''' through‐‐to ‐‐‐‐w‐ to to get to $this->subType) {
                                                                                                                           ash': 기본:
$ name = md5 ($ file ['savename']) $i++) {
                                        if(!is_dir($file['savepath'] .$dir)) {
                                                                                                                           
/**
+---------------------------------- -- ------------
* 업로드된 파일 확인
+------------ - -------------------
* @access private
+------ - ------------------------------------------------- - -
* @param array $file 파일 정보
+--------------------------------- - -------------
* @return boolean
+------------ --- -------------------
*/
비공개 함수 검사($file) {
if($file['error']!== 0) {
//파일 업로드 실패
                       
                                                                             >                                       return false;件> // 파일 크기를 확인하세요
if (! $ This- & gt; checksize ';
               return false >error = '업로드된 파일의 MIME 형식이 허용되지 않습니다! ';
              return false; ;error ='업로드된 파일 형식은 허용되지 않습니다.';
                                                   |';
            return false;
        }
        return true;
    }
    /**
+---------------------------------- -- ------------
* 업로드한 파일 형식이 합법적인지 확인
+--------- --- ---------------------
* @access private
+-- -- ------------------------------------------------ -- ----
* @param string $type data
+------------------------------- -- -------------
* @return 부울
+------------ -- -------------------
*/
    비공개 함수 checkType($type) {
        if(! 비어 있음($this->allowTypes))
            return in_array(strtolower($type),$this->allowTypes);
        return true;
    }
    /**
+---------------------------------- -- ------------
* 업로드한 파일 접미사가 합법인지 확인
+------ ----- ---------------------
* @access private
+ ---- --------------------------------- ---- ----
* @param string $ext 접미사 이름
+--------------- ------- -------------
* @return boolean
+------ ------ ------------------ ------
* /
    비공개 함수 checkExt($ext) {
        if(!empty($this->allowExts))
            return in_array(strtolower($ext),$this->allowExts,true);
        return true;
    }
    /**
+---------------------------------- -- ------------
* 파일 크기가 적합한지 확인
+--------- ---- ---------------------
* @access private
+- ----- ------------------- ----- --
* @param 정수 $size 데이터
+------------------------------- ----- -------------
* @return boolean
+--------- ------- ----------------- --
*/
    비공개 함수 checkSize($size) {
        return !($size > $this->maxSize) | | (-1 == $this->maxSize);
    }
    /**
+---------------------------------- -- ------------
* 파일을 불법적으로 제출했는지 확인
+--------- ---- ---------------------
* @access private
+- ----- ------------------- ----- --
* @param string $filename 파일 이름
+---------------------------- ------ -------------
* @return boolean
+------- ------- ----------------- -------
*/
    비공개 함수 checkUpload($filename) {
        return is_uploaded_file($filename);
    }
    /**
+---------------------------------- -- ------------
* 업로드된 파일의 접미사 가져오기
+--------- ---- ---------------------
* @access private
+- ----- ------------------- ----- --
* @param string $filename 파일 이름
+---------------------------- ------ -------------
* @return boolean
+------- ------- ----------------- -------
*/
    비공개 함수 getExt($filename) {
        $pathinfo = pathinfo($filename);
        return $pathinfo['extension'];
    }
/**
+---------------------------------- -- ------------
* 업로드된 파일 정보 가져오기
+------------ - --------------------
* @access public
+---- -- ------------------------------------------------ -- --
* @return 배열
+---------------------- ----- --------
*/
공개 함수 getUploadFileInfo() {
return $this->uploadFileInfo;
}
/**
+---------------------------------- -- ------------
* 마지막 오류 메시지 가져오기
+------------ -- ---------------------
* @access public
+--- --- ---------------------------------- --- --
* @return 문자열
+---------------------- ------ --------
*/
공개 function getErrorMsg() {
                                      return $this->error;
위 내용을 포함해 thinkphp 파일 업로드 클래스를 소개했는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.