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 相关文章推荐
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
PHP执行速率优化技巧小结
Mar 15 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP strtotime函数详解
Dec 18 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
PHP编写简单的App接口
2016/08/28 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
img标签中onerror用法
2009/08/13 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
python通过线程实现定时器timer的方法
2015/03/16 Python
Python多线程编程(一):threading模块综述
2015/04/05 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
教师现实表现材料
2014/02/14 职场文书
酒店员工检讨书
2014/02/18 职场文书
暑期教师培训方案
2014/06/07 职场文书
2014年政协工作总结
2014/12/09 职场文书
大班上学期个人总结
2015/02/13 职场文书
生死抉择观后感
2015/06/09 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP