侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

非常经典的PHP文件上传类分享

php  /  管理员 发布于 7年前   385

文件上传是项目开发中比较常见的功能,但文件上传的过程比较繁琐,只要是有文件上传的地方就需要编写这些复杂的代码。为了能在每次开发中降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中。

$value){   if (!in_array($key,get_class_vars(get_class($this)))){         continue;        }       $this->setOption($key, $value);       }   }   function uploadfile($field) {      $return=true;     if (!$this->CheckPath()) {       $this->errormsg=$this->geterrorNum();       return false;     }     $name=$_FILES[$field]['name'];     $tmpname=$_FILES[$field]['tmp_name'];     $filesize=$_FILES[$field]['size'];     $error=$_FILES[$field]['error'];       if (is_array($name)) {       $errors=array();        for ($i=0;$igetFile($name[$i],$tmpname[$i],$filesize[$i],$errors[$i])) {           if (!$this->CheckSize() && !$this->CheckType()) { $errors=$this->getErrorNum(); return false; }     }else{ $errors=$this->getErrorNum(); return false;         }         if (!$return) {           $this->getFile();         }        }        if ($return) {         $fileNames=array();         for ($i=0;$igetFile($name[$i], $tmpname[$i], $filesize[$i], $filesize[$i])) { $this->SetFileName(); if (!$this->MoveFile()) {   $errors[]=$this->getErrorNum();   $return=false; }else{   $fileNames[]=$this->getNewName(); }           }     }         $this->newname=$fileNames;        }         $this->errormsg=$errors;         return $return;  }else{        if($this->getFile($name,$tmpname,filesize,$error)){         if(!$this->CheckSize()){           return false;         }         if(!$this->CheckType()){           return false;         }          $this->SetFileName();         if ($this->MoveFile()) { return true;         }        }else{       return false;       }   if (!$return) {       $this->setOption('ErrorNum', 0);       $this->errormsg=$this->geterrorNum();       }      return $return;     }   }   /**    +------------------------------------------------------------------------    *设置类属性值函数    +------------------------------------------------------------------------    * @param mix $key    * @param mix $value    */   private function setOption($key,$value){     $key=strtolower($key);     $this->$key=$value;   }   /**    +---------------------------------------------------------------------------    * 获取文件变量参数函数    +---------------------------------------------------------------------------    * @param string $name    * @param string $tmp_name    * @param number $size    * @param number $error    */   private function getFile($name,$tmpname,$filetype,$filesize,$error=0){           $this->setOption('TmpName', $tmpname);     $this->setOption('OrgiName', $name);     $arrstr=explode('.', $name);     $this->setOption('FileType', $arrstr[count($arrstr)-1]);          $this->setOption('FileSize', $filesize);     return true;   }   /**    +-------------------------------------------------------------------------    * 检查上传路径函数    +-------------------------------------------------------------------------    * @return boolean    */   private function CheckPath(){     if(empty($this->filepath)){       $this->setOption('ErrorNum', -5);       return false;     }     if (!file_exists($this->filepath)||!is_writable($this->filepath)) {        if (!@mkdir($this->filepath,0755)) {          $this->setOption('ErrorNum',-4);          return false;        }     }     return true;   }   private function Is_Http_Post(){     if (!is_uploaded_file($this->tmpname)) {       $this->setOption('ErrorNum',-6);        return false;     }else{       return true;     }   }   /**    +--------------------------------------------------------------------    *检查文件尺寸函数    +--------------------------------------------------------------------    * @return boolean    */   private function CheckSize(){     if ($this->filesize>$this->maxsize) {       $this->setOption('ErrorNum', -2);       return false;     }else{       return true;     }   }   /**    +---------------------------------------------------------------    * 检查文件类型函数    +---------------------------------------------------------------    * @return boolean    */   private function CheckType(){     if (in_array($this->filetype, $this->allowtype)) {       return true;     }else{       $this->setOption('ErrorNum', -1);       return false;     }   }   private function SetFileName(){     if ($this->israndname) {       $this->setOption('NewName', $this->RandName());     }else{       $this->setOption('NewName',$this->orginame);     }    }   /**    +-----------------------------------------------------------------    * 获取新文件名    +------------------------------------------------------------------    */   public function getNewName() {     return $this->newname;   }   private function RandName(){     $rule=date("YmdHis").rand(0, 999);     return $rule.'.'.$this->filetype;   }   private function MoveFile(){     if ($this->errornum) {       $filepath=rtrim($this->filaepath,'/').'/';       $filepath.=$this->newname;       if (@move_uploaded_file($this->tmpname,$filepath)) {         return true;        }else{         $this->errormsg=$this->setOption('ErrorNum',-3 );        }     }else{       return false;     }   }   /**    +----------------------------------------------------------------    * 错误信息函数    +----------------------------------------------------------------    * @return string    */    function getErrorNum() {     $erstr="上传文件{$this->orginame}出错";     switch ($this->errornum) {       case 4:        $erstr.="没有文件被上传";         break;       case 3:        $erstr.="文件只被部分上传";         break;       case 2:        $erstr.="上传文件超过了HTML表单MAX_FILE_SIZE指定的值";         break;       case 1:        $erstr.="上传文件超过了php.ini配置文件中upload_max_filesize的值";         break;       case 0:        $erstr="上传{$this->orginame}成功";         break;  case -1:        $erstr="未允许的类型";         break;       case -2:        $erstr.="文件过大,不能超过{$this->maxsize}个字节";          break;       case -3:        $erstr.="上传失败";         break;       case -4:        $erstr="创建上传目录失败,请重新指定上传目录";         break;       case -5:        $erstr="未指定上传路径";         break;       case -6:        $erstr="非法操作";         break;  default:        $erstr.="未知错误";  }     return $erstr;   }  } ?> 

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

您可能感兴趣的文章:

  • 一个非常实用的php文件上传类
  • 一个经典的PHP文件上传类分享
  • php 文件上传类代码
  • php判断文件上传类型及过滤不安全数据的方法
  • PHP5+UTF8多文件上传类
  • php可生成缩略图的文件上传类实例
  • 功能强大的php文件上传类
  • PHP文件上传类实例详解
  • PHP多文件上传类实例
  • php文件上传类的分享


  • 上一条:
    分享php多功能图片处理类
    下一条:
    非常实用的php验证码类
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客