批改状态:合格
老师批语:
<!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脚本处理
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号