批改状态:未批改
老师批语:
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>文件上传</title></head><body>method属性值只能是post,form 必须添加enctype="multipart/form-data<form action="demo.php" method="post" enctype="multipart/form-data"><!--input框的name属性必须添加,必须type="file"--><input type="file" name="my_file"><button>提交</button></form></body></html>

<?php// 文件上传原理// 前单表单中进行一些必要的设置, 以支持文件上传// 后端PHP主要使用超全局变量: $_FILES 来处理上传的文件if (!isset($_FILES['my_file'])) {echo '<script>alert("没有文件被上传");location.assign("index.html");</script>';exit;}// 1. 配置上传参数// 设置允许上传的文件类型$fileType = ['jpg', 'jpeg', 'png', 'gif'];// 设置允许上传的最大文件长度$fileSize = 3145728;// 上传到服务器上指定的目录$filePath = '/uploads/';// 上传的原始文件名$fileName = $_FILES['my_file']['name'];// 上传保存在服务器上的临时文件名$tempFile = $_FILES['my_file']['tmp_name'];// 3. 判断上传是否成功?// 主要是通过$_FILES['my_file']['error']值, 等于0成或,大于1出错,出错类型用switch分析$uploadError = $_FILES['my_file']['error'];if ($uploadError > 0) {switch ($uploadError) {case 1:case 2: die('上传文件不允许超过3M');case 3: die('上传文件不完整');case 4: die('没有文件被上传');default: die('未知错误');}}// 3. 判断文件扩展名是否正确?$extension = explode('.',$fileName)[1];if (!in_array($extension, $fileType)) {die('不允许上传' . $extension . '文件类型');}// 4. 为了防止同名文件相互覆盖, 应该将上传到指定目录的文件重命名,例如用md5+时间戳$fileName = date('YmdHis',time()).md5(mt_rand(1,99)) . '.' . $extension;// 5. 判断文件是否上传成功?// 判断是否是通过post上传的if (is_uploaded_file($tempFile)) {if (move_uploaded_file($tempFile, __DIR__ . $filePath.$fileName)) {// 提示用户上成功,并返回上一个页面,再强行刷新当前页面echo '<script>alert("上传成功");history.back();</script>';} else {die('文件无法移动到指定目录,请检查目录权限');}} else {die('非法操作');}exit();



使用form上传文件时,需要注意的四个地方:
method必须是post;
entypy=”multipart/form-data”必须有;
input type必须是file;
input 必须有name=值;
是关于文件类型、上传是否成功
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号