/**文件名为FileUpload.class.php*将与文件上传相关的成员属性和成员方法声明在一起*/class FileUpload{private $filePath;                                  //保存上传文件将被保存的目的路径private $fileField;                                 //保存从$_FILES[$fileField]中获取上传文件信息private $originName;                           //保存上传文件的源文件明年private $tmpFileName;                       //保存上传文件的临时文件名private $fileType;                                //保存上传文件的类型private $fileSize;                                  //保存上传文件的大小private $newFileName;                       //保存上传文件的新文件名//用于保存上传文件允许的文件类型(保存文件后缀名数组)private $allowType = array('txt','html','php','js','css','jpg','gif','png','doc','swf','rar','zip');private $maxSize = 1000000000;          //允许文件上传的最大长度,默认为1MBprivate $isUserDefName = false;          //文件上传后,是否采用用户自定文件名private $userDefName;                         //保存用户自定义的上传文件mingcprivate $isRandName = false;              //上传文件是否使用随机文件名称private $randName;                             //保存系统随机命名的上传文件名称private $errorNum = 0;                        //保存系统自定义的错误号,默认值为0private $isCoverModer = true;            //上传文件是否覆盖原有的文件,默认值为TRUE/** 构造方法,创建上传文件对象时为部分成员属性列表赋初值* 参数options:提供一个数组,数组下标为成员属性名称,元素值为属性设置的值*/function __construct($options=array()){$this->setOptions($options);                    //调用内容方法为上传文件的属性列表赋值}/** 在对象外部调用该法处理上传文件* 参数filefield提供全局变量数组$_FILES是的第二维数组* 返回值 如果文件上传成功返回TRUE,如果失败则返回FALSE*/function uploadFile($filefield){$this->setOption('errorNum',0);                    //为错误位设置初值$this->setOption('fileField',$filefield);          //通过参数设置成员属性fileField的值$this->setFiles();                                             //调用成员方法设置文件信息$this->checkValid();                                        //判断上传文件是否有效$this->checkFilePath();                                   //检查保存上传文件的路径是否正确$this->setNewFileName();                              //将上传文件设置为新文件名if($this->errorNum <0)                                   //检查上传文件是否出错return $this->errorNum;                            //如果出错退出函数并返回错误号 return $this->copyFile();                                 //将上传文件移动到指定位置  }/** 为成员属性列表赋初值*  参数options:提供一个数组,数组下标为成员属性名称,元素值为属性设置的值*/private function setOptions($options = array()){foreach($options as $key => $val){//遍历参数数组//检查数组的下标是否和成员属性同名if(!in_array($key, array('filePath','fileField','originName','allowType','maxSize','isUserDefName','userDefName','isRandName','randName'))){continue;//如果数组中没有正确的下标则退出循环}$this->setOption($key,$val);//将数组中的值赋给对应数组下标的成员属性}}/** 从$_FILES数组中取值,赋给对应的成员属性*/private function setFiles(){if($this->getFileErrorFromFILES()!=0){//检查上传文件是否出现错误$this->setOption('errorNum',-1);//如果有错误则设置错误标号为-1return $this->errorNum;                //退出函数不向下执行}//调用对象内部函数为保存上传文件源名的成员属性赋值$this->setOption('originName',$this->getFileNameFromFILES());//保存上传文件临时文件名的成员属性赋值$this->setOption('tmpFileName',$this->getTmpFileNameFromFILES());//类型$this->setOption('fileType',$this->getFileTypeFromFILES());//大小$this->setOption('fileSize',$this->getFileSizeFromFILES());                }/**为指定的成员属性赋值*参数key:提供保存成员属性名的变量*参数val:提供将要为成员属性赋的值*/private function setOpiton($key,$val){$this->$key = $val; //为成员属性赋值}/** 为上传文件设置新的文件名称*/private function setNewFileName(){//如果不允许随机文件名并且不允许用户自定义文件名,则新文件件名为上传文件源名if($this->isRandName==false && $this->isUserDefName==false){$this->setOption('newFileName', $this->originName);}elseif($this->isRandName==ture && $this->isUserDefName==false){$this->setOption('newFileName',$this->proRandName().'.'.$this->fileType);}elseif($this->isRandName==false && $this->isUserDefName==true){$this->setOption('newFileName',$this->userDefName);}else{$this->setOption('errorNum',-4);//以上条件都不成立 设置错误为-4}}/** 检查上传是否有效*/private function checkValid(){$this->checkFileSize();//检查上传文件大小是否超出范围$this->checkFileType();//检查上传文件类型是否为允许的类型}/** 检查上传文件类型是否为允许的类型*/private function checkFileType(){if(!in_array($this->fileType, $this->allowType)){$this->setOption('errorNum',-2);return $this->errorNum;}}/** 检查上传文件大小是否超出范围*/private function checkFileSize(){if($this->fileSize > $this->maxSize){$this->setOption('errorNum',-3);return $this->errorNum;}}/** 检查保存上传文件的路径是否有效*/private function checkFilePath(){if(!file_exists($this->filePath)){if($this->isCoverModer){$this->makePath();}else{$this->setOption('errorNum',-6);}}}/** 随机产生上传文件的新文件名称*/private function  proRandName(){$tmpStr = 'abcdefghijklmnopqrstuvwxyz0123456789';$str = "";$len =strlen($tmpStr);for($i=0;$i<8;$i++){$num = rand(0,$len);$str .=$tmpStr[$num];                    }return $str;}/** 创建保存上传文件的路径*/private function makePath(){if(!@mkdir($this->filePath,0755)){$this->setOption('errorNum',-7);}}/** 将上传文件从临时目录中复制到指定的新位置*/private function copyFile(){$filePath = $this->filePath;if($filePath[strlen($filePath)-1] != '/'){$filePath .='/';}$filePath .= $this->newFileName;if(!@move_uploaded_file($this->tmpFileName, $filePath)){$this->setOption('errorNum',-5);}return $this->errorNum;                }/** 从全局变量数组$_FILES中获取上传文件的错误标号*/private function getFileErrorFromFILES(){return $this->filedField['error'];}/** 获取文件的后缀名*/private function getFileTypeFromFILES(){$str =$this->fileField['name'];$aryStr = split("./", $str);$ret = strtolower($aryStr[count($aryStr)-1]);return $ret;}/** 从全局变量数组$_FILES中获取上传文件的名称*/private  function getFileNameFromFILES(){return $this->fileField['name'];}/** 获取临时文件名称*/private  function getTmpFileNameFromFILES(){return $this->fileField['tmp_name'];}/**获取文件大小*/private function getFileSizeFromFILES(){return $this->fileField['size'];}/** 根据错误标号返回对应的错误信息*/public function getErrorMsg(){$str ="上传文件出错:";switch ($this->errorNum){case -1:$str .= "未知错误";break;case -2:$str .= "未允许类型";break;           case -3:$str .= "文件过大";break;case -4:$str .= "产生文件名出错";break;case -5:$str .= "上传失败";break;case -6:$str .= "目录不存在";break;case -7:$str .= "建立目录失败";break;}return $str;}                 }

转载于:https://blog.51cto.com/11410485/1841758

PHP 文件上传类 FileUpload 高洛峰老师 细说PHP相关推荐

  1. fileupload.class.php,PHP 文件上传类 FileUpload 高洛峰老师 细说PHP

    /* *文件名为FileUpload.class.php *将与文件上传相关的成员属性和成员方法声明在一起 */ class FileUpload{ private $filePath;        ...

  2. fileupload.class.php,php文件上传类

    php文件上传类 FileUpload.class.php class FileUpload { private $filepath;     //指定上传文件保存的路径 private $allow ...

  3. php.ini maxfileuploads,细说PHP高洛峰文件上传类源文件

    以下是兄弟连php视频教程中高洛峰老师所教授的文件上传类的源代码,尚没有完全理解精髓,在这里记录一下,供日后有需要时查看: $value){ $key=strtolower($key); if(!in ...

  4. php 上传 类 代码,php 文件上传类代码

    /** * 文件上传类 */ class uploadFile { public $max_size = '1000000';//设置上传文件大小 public $file_name = 'date' ...

  5. php 文件上传页面模板,PHP文件上传类实例详解

    本文实例讲述了PHP文件上传类.分享给大家供大家参考,具体如下: 这里演示了FileUpload.class.php文件上传类,其中用到了两个常量,可在网站配置文件中定义: define('ROOT_ ...

  6. PHP文件系统-文件上传类

    一.文件上传类的说明(这是一个可以处理单个文件上传和多个文件上传的处理类) 1.构造函数初始化的作用是分配存储空间和传递需要设定的参数 2.一个类的资源是有所有的定义变量的,不管是共有.私有的变量 二 ...

  7. 超级好用的php文件上传类(上传、缩略图、水印)

    <? /** * 文件上传类 */ class uploadFile {public $max_size='1000000'; //设置上传文件大小public $file_name='date ...

  8. [上传下载] C#FileUp文件上传类 (转载)

    点击下载 FileUp.zip 主要功能如下 1.把上传的文件转换为字节数组 2.流转化为字节数组 2.上传文件根据FileUpload控件上传 3.把Byte流上传到指定目录并保存为文件 看下面代码 ...

  9. 实例讲解ThinkPHP的UploadFile文件上传类的详细用法

    ThinkPHP文件上传自带了上传类,使用起来非常方便,我们将以一个文件上传实例来讲解ThinkPHP上传类的实际用法,上传类使用时有详细的中文注释,可以非常方便的告诉你类的一些方法或变量的使用方法. ...

最新文章

  1. 观《超能陆战队》未来的“机器人设计师”的必备装备
  2. Python 安装cx_Oracle模块折腾笔记
  3. Scala 中下划线的用法
  4. RKNN Toolkit使用教程
  5. React开发(249):react项目理解 ant design input loading
  6. 南京航空航天大学计算机网课,南京航空航天大学课程教学大纲-南京航空航天大学计算机科学与技术(9页)-原创力文档...
  7. vue2.0中vue-router使用总结
  8. 微信公共账号学习笔记 _ 感想 爪机码字
  9. 皕杰报表使用技巧:竖排文字如何输入
  10. 电子劳动合同具备法律效力,电子签约或成大势所趋
  11. 计算机专业班级网站,计算机专业班级标语
  12. python 拦截windows弹窗广告_Win10如何拦截桌面弹窗广告?流氓软件怎么彻底清除?...
  13. mysql数据库命令备份还原
  14. 2019年8月2 星期五 今日计划
  15. 142Echarts - 矩形树图(Disk Usage)
  16. 芯片k66中文数据手册_IXFK66N50Q2
  17. web全栈工程师技能介绍
  18. java 接收 char字符型
  19. 如何使用谷歌colab
  20. 高斯噪声/白噪声/高斯白噪声的区别

热门文章

  1. 通用的启动参数获取getopt
  2. css优先级计算规则
  3. munin安装---已成功安装
  4. javascript-按圆形排列DIV元素(三)实例---- 图片按椭圆形转动
  5. java压缩----使用ANT JDK压缩---只压缩选中目录的指定文件夹
  6. oracle隐藏游标,Oracle 存储过程隐藏游标
  7. MySQL高级 - 存储引擎 - 特性
  8. RocketMQ消息的存储结构
  9. 分布式事务中的CAP理论
  10. MybatisPlus实现逻辑删除