Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
支持文件上传的表单,两个必须的参数
2.1 method:POST,POST请求,
2.2 ecntype: multipart/form-data,原始的原件流上传
错误处理
3.1 isset():判断某个数组中是否存在某个键,返回布尔值
3.2 通过error返回值进行响应的错误处理
3.2.1 error=1:大小超过了php.ini中的允许上传的文件大小
3.2.2 error=2:大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小
3.2.3 error=3:文件只有部分被上传
3.2.4 error=4:没有文件上传
3.2.5 error=6:找不到临时目录
3.2.6 error=7:文件写入失败,请检查目录权限
3.2.7 error=0:0=>UPLOAD_EER_OK,表示上传成功
3.3 is_uploaded_file:判断是上传方式是否为post;
3.4 pathinfo()[‘extension’]:提取文件名的扩展名,用于判断格式,是否符合需求
3.5 in_array():判断字符串(扩展名)是否在某一个数组中(白名单);
3.6 md5():文件名加密,避免同名文件上传异常
3.7 move_uploaded_file():将临时文件移动到目标目录中,两个目录均需要具体到文件名
单个文件上传,一个type=file的input即可,name属性为超全局变量$_FILES的键;
案例源码
<?php
printf('<pre>%s</pre>',print_r($_FILES,true));
if (isset($_FILES['my_test'])){
foreach($_FILES['my_test']['error'] as $key=>$error){
$name = $_FILES['my_test']['name'][$key];
$tmpname = $_FILES['my_test']['tmp_name'][$key];
switch($error){
case 0:
if (is_uploaded_file($tmpname)){
$allow=['jpg','jpeg','png','gif'];
$exname=pathinfo($name)['extension'];
if(in_array($exname,$allow)){
$depath = 'pic/'.md5($name).'.'.$exname;
if(move_uploaded_file($tmpname,$depath)){
echo '<p>上传成功</p>';
echo "<img src='$depath' width='50'>";
}else{
}
}else{
echo '<p>文件类型错误</p>';
}
}else{
echo '<p>非POST请求</p>';
}
break;
case 1:
echo '大小超过了php.ini中的允许上传的文件大小';
break;
case 2:
echo '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';
break;
case 3:
echo '文件只有部分被上传';
break;
case 4:
echo '没有文件被上传';
break;
case 6:
echo '找不到临时目录';
break;
case 7:
echo '文件写入失败,请检查目录权限';
break;
}
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<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="" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>文件上传</legend>
<!-- 限制上传文件大小的,单位是字节,type类型为hidden,name属性为MAX_FILE_SIZE; -->
<!-- <input type="hidden" name="MAX_FILE_SIZE" value="800000"> -->
<!-- 多文件上传 -->
<input type="file" name="my_test[]" multiple>
<!-- 单文件上传 -->
<!-- <input type="file" name="my_test" > -->
<button>上传</button>
</fieldset>
</form>
</body>
</html>
案例结果