文档章节

php文件上传类

摇滚哈哈狗
 摇滚哈哈狗
发布于 2014/09/29 12:26
字数 674
阅读 20
收藏 0
 <?php
/**
 +----------------------------------------------------------------------------- 
 * 文件上传类
 +-----------------------------------------------------------------------------
 * @author Administrator
 +-----------------------------------------------------------------------------
 */
  class FileUpload{
      
      private $filepath;   //保存路径
      private $allowtype=array('gif','jpg','jpeg','png');
      private $maxsize=1000000;   //最大允许上传大小
      private $israndname=true;  //是否随机
      private $saverule='';//命名规则
      private $orginame;  //原始文件名
      private $tmp_name;   //临时文件名
      private $newname;   //新文件名
      private $filetype;  //文件类型 
      private $size;  //文件大小
      private $errornum=''; //错误号
      private $errormsg;  //错误信息
/**
 +------------------------------------------------------------------------------ 
 *构造函数
 +------------------------------------------------------------------------------ 
 * @param string $savepath   保存路径
 * @param string $allowtype  允许类型
 * @param string $maxsize    允许大小
 * 
 +------------------------------------------------------------------------------
 */      
      function  __construct($option=array()){
           foreach ($option as $key=>$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'];
          var_dump($_FILES[$field]);exit();
          $tmpname=$_FILES[$field]['tmp_name'];
          $size=$_FILES[$field]['size'];
          $error=$_FILES[$field]['error'];*/
            $filearr=$_FILES[$field]; 
             if($this->getFile($filearr)){
                     if($this->CheckSize()&&$this->CheckType()){
                            $this->SetFileName();
                         if ($this->MoveFile()) {
                             return true;
                         }else{
                             return false;
                         }                                                                                                   
                  }else{
                       return  false;
                  }  
             }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($option=array()){
          foreach($option as $key=>$value){
              if ($key=='size'||$key=='tmp_name') {
              $this->setOption($key, $value);
              }
          }         
          //$this->setOption('TmpName', $tmp_name);
          $this->setOption('OrgiName', $option['name']);
          $arrstr=explode('.', $option['name']);
          $this->setOption('FileType', $arrstr[count($arrstr)-1]);          
          //$this->setOption('FileSize', $size);*/
          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="上传文件<font color='red'>{$this->orginame}</font>出错";
          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;
      }
  }
?>


© 著作权归作者所有

上一篇: DIV弹出层
摇滚哈哈狗
粉丝 13
博文 226
码字总数 28445
作品 0
深圳
程序员
私信 提问
PHP实现的多文件上传类及用法示例

PHP实现的多文件上传类及用法示例 这篇文章主要介绍了PHP实现的多文件上传类及用法,详细分析了php实现的多文件上传类与具体的使用技巧,需要的朋友可以参考下 1、upFiles.css.php 文件 <?php ...

james_laughing
02/25
0
0
安全测试之文件上传攻击

文件上传攻击 文件上传类应用的范围还是很广泛的,利用这个应用同样也可以进行攻击。文件上传的方式有多种,可以通过FTP也可以通过HTTP等,对比起来,FTP的上传需要管理大量的用户帐号,并且...

zouhui1003it
2018/01/05
0
0
IIS+PHP环境下文件上传无法访问问题

在Windows下配置PHP运行环境,一个选择就是IIS FastCGI,有时会遇到Apache下没有的权限问题,文件上传是经常遇到的一个。在讲解决方案之前,我们先来分析一下原因。 IIS运行时的Windows用户组...

Haibin-Yang
2016/04/08
55
0
thinkphp集成系列之阿里云oss

web2.0时代;除了纯信息展示类的网站;基本都是有文件上传功能的; 最不济你得让用户换个头像吧;但是随着业务的发展; 如果上传的文件都和网站程序源代码放在一起;那是有相当多的弊端的; ...

白俊遥
2016/05/22
440
0
使用phpexcel解析Excel数据表并存储到数据库中全过程_PHP_thinkphp_cmf

分享经验是为了让你少走弯路————华伟君 使用PHPExcel解析Excel数据表并存储到数据库中全过程 --- 第一部分:thinkphp中实例化上传类获取from表单提交的文件(非thinkPHP用户可以忽略,直...

尘世如潮
2016/06/17
515
1

没有更多内容

加载失败,请刷新页面

加载更多

mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
30分钟前
2
0
android camera2 API流程分析

Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原来的camera的类并没有深入分析。在做项目...

天王盖地虎626
52分钟前
2
0
Flutter for Web 开发环境搭建与验证

最新的Flutter 1.5.4已经支持Web开发,这个教程将介绍如何在Linux、windows和Mac下 安装Flutter web开发环境:安装Flutter SDK和Flutter Web构建工具,并利用Flutter Web 演示代码来验证开发...

汇智网教程
今天
3
0
微信小程序

张小龙的定义 1、不需要下载安装即可使用 实际上也有下载和安装的流程,只不过安装包很小<2M,使得这两个过程很短,不易感知到 2、用户"用完即走"不用关心是否安装太多应用 适用于偶尔使用一...

星闪海洋
今天
2
0
JsonUtil工具类

使用的是fastJson package util; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.f......

嘿嘿嘿IT
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部