php簡(jiǎn)單的上傳類(lèi)分享
來(lái)源:易賢網(wǎng) 閱讀:840 次 日期:2016-08-22 15:18:22
溫馨提示:易賢網(wǎng)小編為您整理了“php簡(jiǎn)單的上傳類(lèi)分享”,方便廣大網(wǎng)友查閱!

本文實(shí)例為大家分享了php上傳類(lèi),供大家參考,具體內(nèi)容如下

<?php

class UploadFile{

  var $inputName;         //控件名

  var $allowType = array(

        'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'

  );                //上傳類(lèi)型

  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);     //上傳的文件類(lèi)型不被允許

    }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 = "上傳的文件類(lèi)型不被允許";

        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ì)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:php簡(jiǎn)單的上傳類(lèi)分享
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話(huà):0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
咨詢(xún)QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)