php简单的上传类分享


Posted in PHP onMay 15, 2016

本文实例为大家分享了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程序设计有所帮助。

PHP 相关文章推荐
支持数组的ADDSLASHES的php函数
Feb 16 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
分享php多功能图片处理类
May 15 #PHP
非常经典的PHP文件上传类分享
May 15 #PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 #PHP
非常实用的php验证码类
May 15 #PHP
thinkphp框架下404页面设置 仅三步
May 14 #PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 #PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 #PHP
You might like
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
Python中logging实例讲解
2019/01/17 Python
利用python求积分的实例
2019/07/03 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
学生实习自我鉴定
2013/10/11 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
员工给公司的建议书
2019/06/24 职场文书
导游词之天津古文化街
2019/11/09 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python