php簡單上傳類

<?php
class UploadFile{
    var $inputName;                 //控件名
    var $allowType = array(
                'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'
    );                               //上傳類型
    var $allowSize = 2097152;    //限制大小
    var $saveDir = UPLOAD;      //保存目錄
    var $isRename = true;               //是否重命名,默認爲true
    var $errID = 0;                     //錯誤代碼,默認爲0
    var $errMsg = "";                   //錯誤信息
    var $savePath = "";                 //保存路徑

    function __construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){
        if(empty($inputName)){
            $this->chk_err(-1);       //無傳入控件名
        }else{
            $this->inputName = $inputName;
        }

        if(!empty($allowType)) $this->allowType = $allowType;
        if(!empty($allowSize)) $this->allowSize = $allowSize;
        if(!empty($saveDir)) $this->saveDir = $saveDir;
        if(!empty($isRename)) $this->isRename = $isRename;
    }

    function is_uploaded(){
        if(empty($_FILES[$this->inputName]['name'])){
            $this->chk_err(4);    //沒有文件被上傳
        }else{
            if(is_uploaded_file($_FILES[$this->inputName]['tmp_name'])){
                return true;
            }else{
                $this->chk_err(-2);       //文件上傳不合法
            }
        }
    }

    function chk_type(){
        if(!in_array($_FILES[$this->inputName]['type'],$this->allowType)){
            $this->chk_err(-3);         //上傳的文件類型不被容許
        }else{
            return true;
        }
    }

    function chk_size(){
        if($_FILES[$this->inputName]['size'] > $this->allowSize){
            $this->chk_(-4);          //上傳的文件過大
        }else{
            return true;
        }
    }

    function move_uploaded(){        //移動上傳文件
        if(!$this->is_uploaded()){
            return false;
        }

        if(!$this->chk_size()){
            return false;
        }

        if(!$this->chk_type()){
            return false;
        }

        //重命名
        if($this->isRename){
            $arrTmp = pathinfo($_FILES[$this->inputName]['name']);
            $extension = strtolower($arrTmp['extension']);
            $file_newname = date("YmdHis").rand(1000,9999)."00.".$extension; //重命名新文件, 00表示爲上傳的爲原圖
        }else{
            $file_newname = $_FILES[$this->inputName]['name'];
        }
        
        if(!file_exists($this->saveDir)){       //判斷保存目錄是否存在
            mkdir($this->saveDir,0777,true);    //創建保存目錄
        }

        //移動文件
        $result = move_uploaded_file($_FILES[$this->inputName]['tmp_name'],$this->saveDir."/".$file_newname);

        if($result){
            $path = $this->savePath = $this->saveDir.$file_newname;        //文件的成功保存路徑
            return $path;
        }else{
            $this->chk_err($_FILES[$this->inputName]['error']);
        }
    
    }

    //判斷出錯信息
    function chk_err($errID){
        $this->errID = $errID;
        switch($this->errID){
            case -4:
                $this->errMsg = "上傳的文件過大";
                break;
            case -3:
                $this->errMsg = "上傳的文件類型不被容許";
                break;
            case -2:
                $this->errMsg = "文件上傳不合法";
                break;
            case -1:
                $this->errMsg = "無控件名傳入";
                break;
            case 1:
                $this->errMsg = '上傳的文件超出了php.ini中upload_max_filesize設定的最大值';
                break;
            case 2:
                $this->errMsg = '上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值';
                break;
            case 3:
                $this->errMsg = '文件只有部分被上傳';
                break;
            case 4:
                $this->errMsg = '沒有文件被上傳';
                break;
            default:
                break;
        }
        return false;
    
    }

    function get_errMsg(){
        echo $this->errMsg;  //輸出錯誤信息
    }

    /**
     +----------------------------------------------------------
     * 取得圖像信息
     *
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image 圖像文件名
     +----------------------------------------------------------
     * @return mixed
     +----------------------------------------------------------
     */
    function getImageInfo($img) {
        $imageInfo = getimagesize($img);
        if( $imageInfo!== false) {
            $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));
            $imageSize = filesize($img);
            $info = array(
                "width"        =>$imageInfo[0],
                "height"    =>$imageInfo[1],
                "type"        =>$imageType,
                "size"        =>$imageSize,
                "mime"        =>$imageInfo['mime'],
            );
            return $info;
        }else {
            return false;
        }
    }

    /**
     +----------------------------------------------------------
     * 生成縮略圖
     +----------------------------------------------------------
     * @static      * @access public      +----------------------------------------------------------      * @param string $image  原圖      * @param string $type 圖像格式      * @param string $thumbname 縮略圖文件名      * @param string $maxWidth  寬度      * @param string $maxHeight  高度      * @param string $position 縮略圖保存目錄      * @param boolean $interlace 啓用隔行掃描      * @param boolean $is_save 是否保留原圖      +----------------------------------------------------------      * @return void      +----------------------------------------------------------      */          function thumb($image,$is_save=true,$suofang=0,$type='',$maxWidth=500,$maxHeight=500,$interlace=true){         // 獲取原圖信息        $info  = $this->getImageInfo($image);          if($info !== false) {             $srcWidth  = $info['width'];             $srcHeight = $info['height'];             $type = empty($type)?$info['type']:$type;             $type = strtolower($type);             $interlace  =  $interlace? 1:0;             unset($info);             if ($suofang==1) {                 $width  = $srcWidth;                 $height = $srcHeight;             } else {                 $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 計算縮放比例                 if($scale>=1) {                     // 超過原圖大小再也不縮略                     $width   =  $srcWidth;                     $height  =  $srcHeight;                 }else{                     // 縮略圖尺寸                     $width  = (int)($srcWidth*$scale);    //147                     $height = (int)($srcHeight*$scale);    //199                 }             }             // 載入原圖             $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type);             $srcImg     = $createFun($image);             //建立縮略圖             if($type!='gif' && function_exists('imagecreatetruecolor'))                 $thumbImg = imagecreatetruecolor($width, $height);             else                 $thumbImg = imagecreate($width, $height);             // 複製圖片             if(function_exists("ImageCopyResampled"))                 imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);             else                 imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height,  $srcWidth,$srcHeight);             if('gif'==$type || 'png'==$type) {                 //imagealphablending($thumbImg, false);//取消默認的混色模式                 //imagesavealpha($thumbImg,true);//設定保存完整的 alpha 通道信息                 $background_color  =  imagecolorallocate($thumbImg,  0,255,0);  //  指派一個綠色                 imagecolortransparent($thumbImg,$background_color);  //  設置爲透明色,若註釋掉該行則輸出綠色的圖             }             // 對jpeg圖形設置隔行掃描             if('jpg'==$type || 'jpeg'==$type)     imageinterlace($thumbImg,$interlace);             //$gray=ImageColorAllocate($thumbImg,255,0,0);             //ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);             // 生成圖片             $imageFun = 'image'.($type=='jpg'?'jpeg':$type);             $length = strlen("00.".$type) * (-1);             $_type = substr($image,-4);             $length = ($type != $_type ? $length+1 : $length);             //裁剪             if ($suofang==1) {                                  $thumbname01 = substr_replace($image,"01.".$type,$length);        //大頭像                 $thumbname02 = substr_replace($image,"02.".$type,$length);        //小頭像                 $imageFun($thumbImg,$thumbname01,100);                 $imageFun($thumbImg,$thumbname02,100);                 $thumbImg01 = imagecreatetruecolor(190,195);                 imagecopyresampled($thumbImg01,$thumbImg,0,0,$_POST['x'],$_POST['y'],190,195,$_POST['w'],$_POST['h']);                 $thumbImg02 = imagecreatetruecolor(48,48);                 imagecopyresampled($thumbImg02,$thumbImg,0,0,$_POST['x'],$_POST['y'],48,48,$_POST['w'],$_POST['h']);                 $imageFun($thumbImg01,$thumbname01,100);                 $imageFun($thumbImg02,$thumbname02,100); //                unlink($image);                 imagedestroy($thumbImg01);                 imagedestroy($thumbImg02);                 imagedestroy($thumbImg);                 imagedestroy($srcImg);                 return array('big' => $thumbname01 , 'small' => $thumbname02);    //返回包含大小頭像路徑的數組             }else{                 if($is_save == false){                                            //縮略圖覆蓋原圖,縮略圖的路徑仍是原圖路徑                     $imageFun($thumbImg,$image,100);                 }else{                     $thumbname03 = substr_replace($image,"03.".$type,$length);    //縮略圖與原圖同時存在,                     $imageFun($thumbImg,$thumbname03,100);                     imagedestroy($thumbImg);                     imagedestroy($srcImg);                     return $thumbname03 ;                    //返回縮略圖的路徑,字符串                 }             }          }          return false;     } }
相關文章
相關標籤/搜索