PHP 文件上传类 FileUpload 高洛峰老师 细说PHP
/**文件名为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相关推荐
- fileupload.class.php,PHP 文件上传类 FileUpload 高洛峰老师 细说PHP
/* *文件名为FileUpload.class.php *将与文件上传相关的成员属性和成员方法声明在一起 */ class FileUpload{ private $filePath; ...
- fileupload.class.php,php文件上传类
php文件上传类 FileUpload.class.php class FileUpload { private $filepath; //指定上传文件保存的路径 private $allow ...
- php.ini maxfileuploads,细说PHP高洛峰文件上传类源文件
以下是兄弟连php视频教程中高洛峰老师所教授的文件上传类的源代码,尚没有完全理解精髓,在这里记录一下,供日后有需要时查看: $value){ $key=strtolower($key); if(!in ...
- php 上传 类 代码,php 文件上传类代码
/** * 文件上传类 */ class uploadFile { public $max_size = '1000000';//设置上传文件大小 public $file_name = 'date' ...
- php 文件上传页面模板,PHP文件上传类实例详解
本文实例讲述了PHP文件上传类.分享给大家供大家参考,具体如下: 这里演示了FileUpload.class.php文件上传类,其中用到了两个常量,可在网站配置文件中定义: define('ROOT_ ...
- PHP文件系统-文件上传类
一.文件上传类的说明(这是一个可以处理单个文件上传和多个文件上传的处理类) 1.构造函数初始化的作用是分配存储空间和传递需要设定的参数 2.一个类的资源是有所有的定义变量的,不管是共有.私有的变量 二 ...
- 超级好用的php文件上传类(上传、缩略图、水印)
<? /** * 文件上传类 */ class uploadFile {public $max_size='1000000'; //设置上传文件大小public $file_name='date ...
- [上传下载] C#FileUp文件上传类 (转载)
点击下载 FileUp.zip 主要功能如下 1.把上传的文件转换为字节数组 2.流转化为字节数组 2.上传文件根据FileUpload控件上传 3.把Byte流上传到指定目录并保存为文件 看下面代码 ...
- 实例讲解ThinkPHP的UploadFile文件上传类的详细用法
ThinkPHP文件上传自带了上传类,使用起来非常方便,我们将以一个文件上传实例来讲解ThinkPHP上传类的实际用法,上传类使用时有详细的中文注释,可以非常方便的告诉你类的一些方法或变量的使用方法. ...
最新文章
- 观《超能陆战队》未来的“机器人设计师”的必备装备
- Python 安装cx_Oracle模块折腾笔记
- Scala 中下划线的用法
- RKNN Toolkit使用教程
- React开发(249):react项目理解 ant design input loading
- 南京航空航天大学计算机网课,南京航空航天大学课程教学大纲-南京航空航天大学计算机科学与技术(9页)-原创力文档...
- vue2.0中vue-router使用总结
- 微信公共账号学习笔记 _ 感想 爪机码字
- 皕杰报表使用技巧:竖排文字如何输入
- 电子劳动合同具备法律效力,电子签约或成大势所趋
- 计算机专业班级网站,计算机专业班级标语
- python 拦截windows弹窗广告_Win10如何拦截桌面弹窗广告?流氓软件怎么彻底清除?...
- mysql数据库命令备份还原
- 2019年8月2 星期五 今日计划
- 142Echarts - 矩形树图(Disk Usage)
- 芯片k66中文数据手册_IXFK66N50Q2
- web全栈工程师技能介绍
- java 接收 char字符型
- 如何使用谷歌colab
- 高斯噪声/白噪声/高斯白噪声的区别