前端 !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);