php簡(jiǎn)單的上傳類分享

字號(hào):


    本文實(shí)例為大家分享了php上傳類,供大家參考,具體內(nèi)容如下
    <?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;        //是否重命名,默認(rèn)為true
      var $errID = 0;           //錯(cuò)誤代碼,默認(rèn)為0
      var $errMsg = "";          //錯(cuò)誤信息
      var $savePath = "";         //保存路徑
      function __construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){
        if(empty($inputName)){
          $this->chk_err(-1);    //無(wú)傳入控件名
        }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);  //沒(méi)有文件被上傳
        }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);     //上傳的文件過(guò)大
        }else{
          return true;
        }
      }
      function move_uploaded(){    //移動(dòng)上傳文件
        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);  //建立保存目錄
        }
        //移動(dòng)文件
        $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']);
        }
       
      }
      //判斷出錯(cuò)信息
      function chk_err($errID){
        $this->errID = $errID;
        switch($this->errID){
          case -4:
            $this->errMsg = "上傳的文件過(guò)大";
            break;
          case -3:
            $this->errMsg = "上傳的文件類型不被允許";
            break;
          case -2:
            $this->errMsg = "文件上傳不合法";
            break;
          case -1:
            $this->errMsg = "無(wú)控件名傳入";
            break;
          case 1:
            $this->errMsg = '上傳的文件超出了php.ini中upload_max_filesize設(shè)定的最大值';
            break;
          case 2:
            $this->errMsg = '上傳文件的大小超過(guò)了HTML表單中MAX_FILE_SIZE選項(xiàng)指定的值';
            break;
          case 3:
            $this->errMsg = '文件只有部分被上傳';
            break;
          case 4:
            $this->errMsg = '沒(méi)有文件被上傳';
            break;
          default:
            break;
        }
        return false;
       
      }
      function get_errMsg(){
        echo $this->errMsg; //輸出錯(cuò)誤信息
      }
      /**
       +----------------------------------------------------------
       * 取得圖像信息
       *
       +----------------------------------------------------------
       * @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); // 計(jì)算縮放比例
            if($scale>=1) {
              // 超過(guò)原圖大小不再縮略
              $width  = $srcWidth;
              $height = $srcHeight;
            }else{
              // 縮略圖尺寸
              $width = (int)($srcWidth*$scale);  //147
              $height = (int)($srcHeight*$scale);  //199
            }
          }
          // 載入原圖
          $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type);
          $srcImg   = $createFun($image);
          //創(chuàng)建縮略圖
          if($type!='gif' && function_exists('imagecreatetruecolor'))
            $thumbImg = imagecreatetruecolor($width, $height);
          else
            $thumbImg = imagecreate($width, $height);
          // 復(fù)制圖片
          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);//取消默認(rèn)的混色模式
            //imagesavealpha($thumbImg,true);//設(shè)定保存完整的 alpha 通道信息
            $background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一個(gè)綠色
            imagecolortransparent($thumbImg,$background_color); // 設(shè)置為透明色,若注釋掉該行則輸出綠色的圖
          }
          // 對(duì)jpeg圖形設(shè)置隔行掃描
          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);  //返回包含大小頭像路徑的數(shù)組
          }else{
            if($is_save == false){                      //縮略圖覆蓋原圖,縮略圖的路徑還是原圖路徑
              $imageFun($thumbImg,$image,100);
            }else{
              $thumbname03 = substr_replace($image,"03.".$type,$length);  //縮略圖與原圖同時(shí)存在,
              $imageFun($thumbImg,$thumbname03,100);
              imagedestroy($thumbImg);
              imagedestroy($srcImg);
              return $thumbname03 ;          //返回縮略圖的路徑,字符串
            }
          }
         }
         return false;
      }
    }
    以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)php程序設(shè)計(jì)有所幫助。