欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php简单的上传类分享

程序员文章站 2024-02-13 08:25:22
本文实例为大家分享了php上传类,供大家参考,具体内容如下

本文实例为大家分享了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;
  }
}

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。