前端 !DOCTYPE html html lang="en" head meta charset="UTF-8" meta http-equiv="X-UA-Compatible" content="IE=edge" meta name="viewport" content="width=device-width, initial-scale=1.0" titleDocument/title /head body form action="userUpload.ph
前端
-
<!DOCTYPE html> -
<html lang="en"> -
<head> -
<meta charset="UTF-8"> -
<meta http-equiv="X-UA-Compatible" content="IE=edge"> -
<meta name="viewport" content="width=device-width, initial-scale=1.0"> -
<title>Document</title> -
</head> -
<body> -
<form action="userUpload.php" method="post" enctype="multipart/form-data"> -
单文件上传<input type="file" name="pic" id=""> -
<input type="submit" value="上传"> -
</form> -
<form action="userUpload.php" method="post" enctype="multipart/form-data"> -
多文件上传<input type="file" name="pic[]" multiple id=""> -
<input type="submit" value="上传"> -
</form> -
</body> -
</html>
-
<?php -
// 文件上传类 -
/** -
* 1 判断上传过程中是否有错误 -
* 2 验证上传文件的类型是否符合要求 -
* 3 验证上传文件的大小是否符合要求 -
* 4 判断上传路径和上传成功后要保存的文件名新名称 -
* 5 将图片从垃圾目录中移除 -
* 注意: -
* 如果是单文件上传$_FILES['表单名称']则是一个一维数组 -
* 如果是多文件上传$_FILES['表单名称']则是一个二维数组,数组中name对应着每个上传文件的名称 -
*/ -
class Upload{ -
//成员属性 -
//将是检测上传过程的数组变量 -
public $file; -
public $pic; -
public $path; -
public $size; -
public $type; -
public $newImg; -
public $pathInfo = array(); -
//成员方法 -
//构造方法 初始化成员属性值 -
function __construct($pic,$path='./upload',$size = 5000000,array $type = array('image/jpeg','image/jpg','image/gif','image/png')){ -
//初始化赋值 -
$this->pic = $pic; -
$this->file= $_FILES[$pic]; -
$this->path= $path; -
$this->size =$size; -
$this->type = $type; -
} -
//需要一个方法可以在外部调用进行上传文件操作 -
public function do_upload($mutiple = false){ -
if($mutiple === false){ -
//用户使用单文件上传方式 -
return $this->myExec(); -
}else{ -
$return = []; -
//用户使用多文件上传方式 -
foreach($_FILES[$this->pic]['name'] as $k=>$v){ -
$this->file['name'] = $v; -
$this->file['type'] = $_FILES[$this->pic]['type'][$k]; -
$this->file['error'] = $_FILES[$this->pic]['error'][$k]; -
$this->file['tmp_name'] = $_FILES[$this->pic]['tmp_name'][$k]; -
$this->file['size'] = $_FILES[$this->pic]['size'][$k]; -
$return[]= $this->myExec(); -
} -
return $return; -
} -
} -
//6 制作一个方法将文件上传的过程调用执行 -
private function myExec(){ -
//需要将文件上传的5步都执行一次判断是否成功 -
if($this->fileError() !==true){ -
return $this->fileError(); -
}elseif($this->patternType() !== true){ -
return $this->patterType(); -
}elseif($this->patternSize() !== true){ -
return $this->patternSize(); -
}elseif($this->reNameImage() !== true){ -
return $this->reNameImage(); -
}elseif($this->moveImg() !== true){ -
return $this->moveImg(); -
}else{ -
return $this->moveImg(); -
} -
} -
// 1 判断上传过程中是否有错误 -
private function fileError(){ -
//错误判断 -
if($this->file['error']){ -
switch($this->file['error']>0){ -
case 1: -
return '超出PHP.INI 配置文件中的upload_max_filesize设置的值'; -
case 2: -
return '超过了HTML表单中设置的max_file_size的值'; -
case 3: -
return '只有部分文件被上传'; -
case 4: -
return '没有文件上传'; -
case 6: -
return '找不到临时目录'; -
case 7: -
return '写入失败'; -
} -
} -
return true; -
} -
//2 验证上传文件的类型是否符合要求 -
private function patternType(){ -
if(!in_array($this->file['type'],$this->type)){ -
return '类型不合法'; -
} -
return true; -
} -
// 3 验证上传文件的大小是否符合要求 -
private function patternSize(){ -
if($this->file['size']>$this->size){ -
return '上传文件大小超过了预设的'.$this->size.'byte大小'; -
} -
return true; -
} -
// 4 判断上传路径和上传成功后要保存的文件名新名称 -
private function reNameImage(){ -
//创建保存目录,可能会遇到upload/pic/nihao/ -
if(!file_exists($this->path)){ -
mkdir($this->path,0777,true); -
} -
//获取图片后缀名 -
$suffix = strrchr($this->file['name'],'.'); -
//判断名称是否重复 -
do{ -
//制作新名称 -
$this->newImg = md5(time().mt_rand(1,1000).uniqid()).$suffix; -
}while(file_exists($this->path.$this->newImg)); -
return true; -
} -
// 5 将图片从垃圾目录中移除 -
private function moveImg(){ -
if(move_uploaded_file($this->file['tmp_name'],$this->path.$this->newImg)){ -
$this->pathInfo['pathInfo']= $this->path.$this->newImg; -
$this->pathInfo['name']= $this->newImg; -
$this->pathInfo['path'] = $this->path; -
return $this->pathInfo; -
}else{ -
return '未知错误,请重新上传'; -
} -
} -
} -
?>
-
<?php -
//包含上传类,创建上传文件对象 -
echo '<pre>'; -
var_dump($_FILES); -
include './upload.php'; -
$upload = new Upload('pic'); -
$res=$upload->do_upload(true); -
var_dump($res);
