Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
namespace _0818;
// 上传文件步骤
// 1、判断文件是否上传 (上传了不一定上传成功)
// 2、判断文件 上传了是否成功(检测上传失败的原因)
// 3、上传成功,判断文件上传方式是否合法
// 4、上传方式合法,判断 是否允许上传的文件类型
// 5、上传文件类型合法,合法,开始移动文件路径 (从临时文件路径移动到 指定文件路径)
// 6、上传移动路径成功,上传成功
// 7、预览测试
// printf('<pre>%s</pre>',print_r($_FILES,true));
// 判断文件是否上传成功
// isset 判断某个变量是否存在
if (isset($_FILES['my_pic'])) {
// 当存在执行、、、
// 原始文件名
$name = $_FILES['my_pic']['name'];
echo $name.'<hr>';
// 临时文件名
$tmpName = $_FILES['my_pic']['tmp_name'];
echo $tmpName.'<hr>';
// 错误代码
$error = $_FILES['my_pic']['error'];
echo $error.'<hr>';
// error 是判断是否上传成功的关键。 不同的值代表不同的意思
if ($error>0) {
// echo '上传失败';
// }else{
// echo '上传成功,进行系一部操作';
// }
$tips = '<span style="color:red">上传失败!</span><br>';
switch($error) {
case 1:
// echo '大小超过了配置文件 php.ini 允许上传的文件大小';
// 拼接
$tips .= '大小超过了配置文件 php.ini 允许上传的文件大小';
break;
case 2:
// echo '大小超过了表单(name="MAX_FILE_SIZE" 值)允许上传的文件大小';
$tips .= '大小超过了表单(name="MAX_FILE_SIZE" 值)允许上传的文件大小';
break;
}
echo "<p>$tips</p>";
}else{
// 1、判断上传方式是否合法 方法是否为 post
if(is_uploaded_file($tmpName)) {
// 2、文件类型白名单
$allow = ['jpg','jpeg','png','gif'];
// 获取文件扩展名
// print_r(pathinfo('66988b4bc84a60da7e21c8e50e7e32d7.jpg')) ;
$ext = pathinfo($name)['extension'];
//in_array(要查询的值,对比数组) 判断值是否存在
if(in_array($ext,$allow)){
// 如果上传方式合法,且是允许的类型则可以移动到指定的目标目录
// 设置指定路径
$path = 'uploads/';
// 为了防止 同名覆盖 ,应该给 目标文件名重命名
$dest = $path.md5($name).rand(1,100).'.'.$ext;
// 移动 ,将文件从临时目录 移动到指定目标目录
if(move_uploaded_file($tmpName,$dest)){
echo '上传移动成功,上传成功';
// 上传预览
echo "<img src ='$dest' width='500'>";
}else {
echo '上传移动失败';
}
}else{
echo '文件类型错误';
}
}else{
echo '上传方法错误';
}
}
// if (isset($_FILES['my_pic'])) {
// // 原始文件名
// $name = $_FILES['my_pic']['name'];
// // 临时文件名
// $tmpName = $_FILES['my_pic']['tmp_name'];
// // 错误代码
// $error = $_FILES['my_pic']['error'];
// if ($error >0) {
// $tips = '<span style="color:red">上传失败!</span><br>';
// switch ($error) {
// case 1:
// $tips .= '大小超过了php.ini中的允许上传的文件大小';
// break;
// case 2:
// $tips .= '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';
// break;
// case 3:
// $tips .= '文件只有部分被上传';
// break;
// case 4:
// $tips .= '没有文件被上传';
// break;
// case 6:
// $tips .= '找不到临时目录';
// break;
// case 7:
// $tips .= '文件写入失败,请检查目录权限';
// break;
// }
// echo "<p>$tips</p>";
// } else {
// //1 判断上传方式是否合法? POST
// if (is_uploaded_file($tmpName)) {
// // 文件类型白名单
// $allow = ['jpg','jpeg','png','gif'];
// // 扩展名
// $ext = pathinfo($name)['extension'];
// if (in_array($ext, $allow)) {
// // 如果上传方式合法,且是允许的类型,则可以移动到指定的目录中了
// $path = 'uploads/';
// // 为了防止同名覆盖,应该给目标文件名重命名
// $dest =$path. md5($name) . '.' . $ext;
// // 将文件从临时目录移动到目标目录中
// if (move_uploaded_file($tmpName, $dest)) {
// echo '<p>上传成功</p>';
// // 预览
// echo "<img src='$dest' width='300'>";
// } else {
// }
// } else {
// echo '<p>文件类型错误</p>';
// }
// } else {
// echo '<p>上传方式非法</p>';
// }
// }
}
?>
<!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>
<!-- 超全局的 遍历 数组 $FILES -->
</head>
<body>
<!-- 上传表单必有的2个属性
1、上传方法 method :post
2、 enctype :换成 multipart/form-data ,默认的数组需修改
-->
<form action="" method="POST" enctype="multipart/form-data">
<!-- 表单域 ---先来单文件上传
-->
<fieldset>
<legend>单文件上传</legend>
<!-- name 命名与后端代码相关联 ,给服务器 编程语言用的变量名,$_FILES
注意 使用蛇形命名 -->
<!-- 限制文件上传的大小 防君子不防小人
type 类型 从text 变为 hideen 不让看到 .看不到不是禁用display 哦
value 值 是以字节计算的哦-->
<input type="hidden" name="MAX_FILE_SIZE" value="80000000">
<input type="file" name="my_pic">
<button>上传</button>
</fieldset>
</form>
</body>
</html>
<?php
namespace _0818;
// 简约版 麻烦的也行 参照单文件进行多层校验 。
printf('<pre>%s</pre>',print_r($_FILES,true));
foreach($_FILES as $file){
// 只要判断$file['error'] === 0 表示上传成功
if ($file['error'] ===0) {
// 暂不加密目标文件名
$dest = 'uploads/' . $file['name'];
// 移动到目标目录中
move_uploaded_file($file['tmp_name'], $dest) ;
// 预览
echo "<img src='$dest' width='200'>";
}
};
?>
<!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>
<!-- 超全局的 遍历 数组 $FILES -->
</head>
<body>
<!-- 上传表单必有的2个属性
1、上传方法 method :post
2、 enctype :换成 multipart/form-data ,默认的数组需修改
-->
<form action="" method="POST" enctype="multipart/form-data">
<!-- 表单域 -->
<fieldset>
<legend>多文件上传-逐个上传</legend>
<input type="file" name="my_pic1"><br>
<input type="file" name="my_pic2"><br>
<input type="file" name="my_pic"><br>
<button>上传</button>
</fieldset>
</form>
</body>
</html>
<?php
namespace _0818;
// 简约版 麻烦的也行 参照单文件进行多层校验 。
printf('<pre>%s</pre>',print_r($_FILES,true));
// 必须校验 my_pic 是否存在 否则不能执行
if (isset($_FILES['my_pic'])) {
foreach ($_FILES['my_pic']['error'] as$key=>$error) {
// 0 =》可以换成 UPLOAD_ERR_OK
if ($error ===0) {
// 临时文件名称
$tmpName= $_FILES['my_pic']['tmp_name'][$key];
// 原始文件名称
$name= $_FILES['my_pic']['name'][$key];
// 暂不加密的目标文件名称
$dest = 'uploads/' . $name;
// 移动到目标目录中
move_uploaded_file($tmpName, $dest) ;
// 预览
echo "<img src='$dest' width='200'>";
}
};
}
?>
<!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>支持文件上传的表单-多文件表单-逐个上传-2</title>
<!-- 超全局的 遍历 数组 $FILES -->
</head>
<body>
<!-- 上传表单必有的2个属性
1、上传方法 method :post
2、 enctype :换成 multipart/form-data ,默认的数组需修改
-->
<form action="" method="POST" enctype="multipart/form-data">
<!-- 表单域 -->
<fieldset>
<legend>多文件上传-逐个上传-2</legend>
<input type="file" name="my_pic[]"><br>
<input type="file" name="my_pic[]"><br>
<input type="file" name="my_pic[]"><br>
<button>上传</button>
</fieldset>
</form>
</body>
</html>
<?php
namespace _0818;
// 简约版 麻烦的也行 参照单文件进行多层校验 。
printf('<pre>%s</pre>',print_r($_FILES,true));
// 必须校验 my_pic 是否存在 否则不能执行
if (isset($_FILES['my_pic'])) {
foreach ($_FILES['my_pic']['error'] as$key=>$error) {
// 0 =》可以换成 UPLOAD_ERR_OK
if ($error ===0) {
// 临时文件名称
$tmpName= $_FILES['my_pic']['tmp_name'][$key];
// 原始文件名称
$name= $_FILES['my_pic']['name'][$key];
// 暂不加密的目标文件名称
$dest = 'uploads/' . $name;
// 移动到目标目录中
move_uploaded_file($tmpName, $dest) ;
// 预览
echo "<img src='$dest' width='200'>";
}
};
}
?>
<!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>支持文件上传的表单-多文件表单-按住ctrl一起批量上传-2</title>
<!-- 超全局的 遍历 数组 $FILES -->
</head>
<body>
<!-- 上传表单必有的2个属性
1、上传方法 method :post
2、 enctype :换成 multipart/form-data ,默认的数组需修改
-->
<form action="" method="POST" enctype="multipart/form-data">
<!-- 表单域 -->
<fieldset>
<legend>多文件上传-按住ctrl一起批量上传</legend>
<!-- 增加一个属性 multipe 允许同时选择多个-->
<!-- 与demo3.php相比,只改了二个地方 -->
<!-- 1. 只保留一个my_pic[] -->
<!-- 2. 加一个 multiple 属性,支持多选 -->
<!-- php处理上传的代码和zuoye3.php完全一样,不用动 -->
<input type="file" name="my_pic[]" multiple>
<button>上传</button>
</fieldset>
</form>
</body>
</html>