Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<!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>文件上传</title>
</head>
<body>
<form action="upload2.php" method="post" enctype="multipart/form-data">
<fieldset>
<legend>
单文件上传
</legend>
<label for="my_file"></label>
<input type="file" name="my_file" id="my_file">
<button>上传</button>
</fieldset>
</form>
</body>
</html>
<?php
echo '<pre>';
var_dump(uploadFile($_FILES['my_file']));
function uploadFile($fileInfo,$uploadPath='./uploads',$flag=true,$allowExt=['jpg','png','wbmp','gif','jpeg','bmp'],$maxSize=2097152){
if($fileInfo['error'] == 0){
$arr = explode('.',$fileInfo['name']);//explode 分割字符串,以(.)点,分割
// var_dump($arr);
$ext = end($arr); //取后缀
$prefix = array_shift($arr); //取文件名
if(!in_array($ext,$allowExt)){//判断后缀是否存在
return $res = '文件类型不合法';
}
if($fileInfo['size'] > $maxSize){ //判断文件大小
return $res = '文件大小超过限制的最大值';
}
if(!getimageSize($fileInfo['tmp_name'])){//检测图片是否合法
return $res = '不是真实图片';
}
if(!is_uploaded_file($fileInfo['tmp_name'])){//检测上传方式是否为http post
return $res = '上传方式错误:请使用http post 方式上传';
}
// $uploadPath = 'uploads/'; //存储文件目录
if(!file_exists($uploadPath)){ //file_exists判断目录是否存在
mkdir($uploadPath,0770,true); //mkdir创建目录,参数0770为权限
chmod($uploadPath,0770); //为以防万一,再次修改权限为0770
}
// move_uploaded_file,copy 函数都可以移动文件
// echo $prefix.time(); //调试用
$des = $uploadPath.'/'.md5($prefix.time()).'.'.$ext; //将散列后的文件名,与后缀拼接。($prefix.time()拼接为原文件名+时间戳,md5 在将其散列形成独一无二的文件名,避免用户上传相同文件名的文件导致出现问题)
// echo $des;//调试用
$moveResult = move_uploaded_file($fileInfo['tmp_name'],$des);//参数:将$fileInfo['tmp_name']临时文件,复制到$des,
if(!$moveResult){
$res['error'] = '文件移动失败';
}else{
$res['info'] = $fileInfo['name'] . '上传成功';
$res['fileRealPath'] = $des;
}
return $res;
}else{
switch($fileInfo['error']):
case 1:
echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
break;
case 2:
echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
break;
case 3:
echo '文件只有部分被上传';
break;
case 4:
echo '没有文件被上传。 是指表单的file域没有内容,是空字符串';
break;
case 6:
echo '找不到临时文件夹';
break;
default:
echo '系统错误';
endswitch;
}
}