Correction status:qualified
Teacher's comments:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form enctype="multipart/form_data"> <!-- <input type="hidden" name="MAX_FILE_SIZE" value="542488"> --> <fieldset style="width: 400px"> <legend>文件上传</legend> <p>文件上传:<input type="file" name="upload" id="file"></p> <p><button type="sbmit" name="submit">上传</button></p> </fieldset> </form> </body> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript"> $('button').eq(0).click(function(){ if($('#file').val().length==0){ $('#file').parent($('span').remove()) $('button:first').after('<span style="color: #ff0000;">请先选择上传的文件!</span>') }else{ //获取文件路径 var files=$("#file")[0].files[0] //创建 formData 对象 FormData为序列化表单 var formdata = new FormData() formdata.append('files',files) //采用 ajax 进行发送 $.ajax({ url:'admin/check.php', type:'POST', data:formdata, dataType:'JSON', processData:false,//用于对data参数进行序列化处理 contentType:false, success:function (status) { console.log(status.msg) $('#file').parent($('span').remove()) $('#file').after('<br><span>'+status.msg+'</span>') } }) } }) </script> </html>
点击 "运行实例" 按钮查看在线实例
<?php if($_SERVER['REQUEST_METHOD']=="POST"){ //判断提交过来的请求是否为空,不为空则有文件上传 if(isset($_FILES['files'])){ $img_type=['image/jpg','image/jpeg','image/png']; //判断上传的图片类型是否是图片数组中的类型 if(in_array($_FILES['files']['type'], $img_type)){ //将上传的文件重命名 $date=date('Ymdhis');//得到当前时间 $fileName=$_FILES['files']['name'];//得到上传文件的名字 $name=explode('.',$fileName);//将文件名以'.'分割得到后缀名,得到一个数组 $newPath=$date.'.'.$name[1];// $oldPath=$_FILES['files']['tmp_name'];//临时文件夹,即以前的路径 //将用户文件保存到指定目录 if(move_uploaded_file($oldPath,"upload/{$newPath}")){ echo json_encode(['msg'=>'上传成功!新的文件名是:'.$newPath]); } else { echo json_encode(['msg'=>'上传失败']); } }else{ echo json_encode(['msg'=>'只可以上传jpg,jpeg,png的图片']); } }else{ echo json_encode(['msg'=>'请先上传文件']); } //上传失败的常见错误捕获 if($_FILES['files']['error']>0){ switch ($_FILES['files']['error']) { case 1: echo json_encode(['msg'=>'文件超过php.ini中的默认大小']); break; case 2: echo json_encode(['msg'=>'文件超过表单设置大小']); break; case 3: echo json_encode(['msg'=>'文件只有一部分上传']); break; case 4: echo json_encode(['msg'=>'没有文件上传']); break; case 6: echo json_encode(['msg'=>'没有临时文件夹']); break; case 8: echo json_encode(['msg'=>'上传意外终止']); break; default: echo json_encode(['msg'=>'未知错误']); break; } } //清空临时文件下的文件,系统也会在回话结束时清空 if(file_exists($_FILES['files']['tmp_name'])&&is_file($_FILES['files']['tmp_name'])){ unlink($_FILES['files']['tmp_name']); } } ?>
点击 "运行实例" 按钮查看在线实例
课程总结
1.系统变量: $_FILES是一个二维数组,一维是当前的文件上件控件的名称,就是name属性值
二维是它的当前属性,最重要的有以下几个:
$_FILES['file']['name']: 文件原始名称
$_FILES['file']['type']: 文件类型
$_FILES['file']['size']: 上传的文件大小
$_FILES['file']['tmp_name']: 服务器上的临时文件夹
$_FILES['file']['error']: 上传错误代码
2.处理脚本的三种语法:
(1)最严格的写法:$_SERVER['PHP_SELF']:建议实际工作中用htmlspecialchars()进行防跨域攻击处理
(2) 最死板的写法,直接写上当前文件名: demo.php
(3)最简单的写法: 空,啥也不写,默认就是提交到当前页面的php脚本处理