首页 > 编程 > PHP > 正文

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

2020-03-22 16:55:03
字体:
来源:转载
供稿:网友
文件上传是项目开发中比较常见的功能,但文件上传的过程比较繁琐,只要是有文件上传的地方就需要编写这些复杂的代码。为了能在每次开发中降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中。 php +----------------------------------------------------------------------------- * 文件上传类 +----------------------------------------------------------------------------- * @author Administrator +----------------------------------------------------------------------------- html' target='_blank'>class FileUpload{ private $filepath; //保存路径 private $allowtype=array('gif','jpg','jpeg','png','txt'); private $maxsize=1000000; //最大允许上传大小 private $israndname=true; //是否随机 private $orginame; //原始文件名 private $tmpname; //临时文件名 private $newname; //新文件名 private $filetype; //文件类型 private $filesize; //文件大小 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']; $tmpname=$_FILES[$field]['tmp_name']; $filesize=$_FILES[$field]['size']; $error=$_FILES[$field]['error']; if (is_array($name)) { $errors=array(); for ($i=0;$i count($name);$i++){ if ($this- getFile($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;$i count($name);$i++){ if ($this- getFile($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="上传文件 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; 以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表