批改状态:合格
老师批语:完成的相当OK,
file_upload: On / Off 是否允许上传文件upload_tmp_dir: 文件上传临时目录upload_max_filesize: 默认32M, 单个文件上传的最大尺寸post_max_size: 允许通过post方式提交的数据量大小, 至少要大于upload_max_filesizemax_file_uploads: 默认20, 单个请求, 允许上传的最大文件数量is_uploaded_file(): 检测是否是通过POST方式上传的文件,——检测临时文件是否合法move_uploaded_file(): 移动临时文件到用户自定义的目录中2.3 $_FILES: 超全局变量,以数组形式展示上传文件的一些基础信息
2.4 错误信息:0: UPLOAD_ERR_OK, 没有错误发生,文件上传成功1: UPLOAD_ERR_INI_SIZE, 上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值2: UPLOAD_ERR_FORM_SIZE, 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值3: UPLOAD_ERR_PARTIAL, 文件只有部分被上传(网络临时中断,只有部分上传)4: UPLOAD_ERR_NO_FILE, 没有文件被上传6: UPLOAD_ERR_NO_TMP_DIR, 找不到临时文件目录(文件夹或改动,极少遇到,除非人为恶意)7: UPLOAD_ERR_CANT_WRITE, 文件写入失败, 上传目录无写的权限
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>PDF文件上传</title></head><body><!-- action:处理上传脚本, method: 必须是POST, multipart/form-data:允许接收表单提交的文件 --><form action="demo2.php" method="POST" enctype="multipart/form-data"><fieldset><legend>PDF文件上传</legend><!-- 这个上传文件大小的限制字段,必须写到file字段的前面 --><input type="hidden" name="MAX_FILE_SIZE" value="600"><input type="file" name="user_pic"><button>上传</button></fieldset></form></body></html>
<?phpnamespace chapter8;use Exception;// 处理用户文件上传try {// 1. 判断文件是否上传成功:查看user_pic键下error的值$errorCode = $_FILES['user_file']['error'];if ( $errorCode > UPLOAD_ERR_OK) {switch ($errorCode) {case UPLOAD_ERR_INI_SIZE:throw new Exception('上传的文件超过了php.ini中upload_max_filesize选项限制的值');break;case UPLOAD_ERR_FORM_SIZE:throw new Exception('上传文件的大小超过了HTML表单中 MAX_FILE_SIZE选项指定的值');break;case UPLOAD_ERR_PARTIAL:throw new Exception('文件只有部分被上传');break;case UPLOAD_ERR_NO_FILE:throw new Exception('没有文件被上传');break;case UPLOAD_ERR_NO_TMP_DIR:throw new Exception('找不到临时文件夹');break;case UPLOAD_ERR_CANT_WRITE:throw new Exception('文件写入失败');break;default:throw new Exception('未知类型错误');}}// 2. 判断临时文件是否合法:$tmpFile = $_FILES['user_file']['tmp_name'];if (true === is_uploaded_file($tmpFile)) {// 获取上传文件的扩展名$extension = pathinfo($_FILES['user_file']['name'])['extension'];if ($extension === 'pdf') {// 目标文件名$destName = 'uploads/' . md5($_FILES['user_file']['name']).time() . '.' . $extension;// 3. 将临时文件移动到用户目录中if (move_uploaded_file($tmpFile, $destName)) {echo '<script>alert("上传成功");location.href="form1.html";</script>';}} else {throw new Exception('文件类型错误');}} else {throw new Exception('非法操作');}} catch (Exception $e) {echo $e->getMessage();}
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>上传文件</title></head><body><!-- action:处理上传脚本, method: 必须是POST, multipart/form-data:允许接收表单提交的文件 --><form action="demo3.php" method="POST" enctype="multipart/form-data"><fieldset><legend>文件上传</legend><!-- 控件名称有数组方式表示--><input type="file" name="user_pic[]"><input type="file" name="user_pic[]"><input type="file" name="user_pic[]"><input type="file" name="user_pic[]"><button>上传</button></fieldset></form></body></html>
<?phpnamespace chapter8;use Exception;// print_r($_FILES);// 目标: 将这个二维数组转为一维格式// $images: 创建一个数组保存所有已经格式化后的每个文件的信息$images = [];foreach ($_FILES as $value) {//判断是否是多文件上传:$_FILES里面任意一个键是数组就是if (is_array($value['name'])) {for ($i = 0; $i < count($value['name']); $i++) {$images[] = ['name' => $value['name'][$i],'type' => $value['type'][$i],'tmp_name' => $value['tmp_name'][$i],'error' => $value['error'][$i],'size' => $value['size'][$i],];}}}echo '<hr>';//print_r($images);//再次遍历获取到的数组foreach ($images as $image) {try {// 1. 判断文件是否上传成功?$errorCode = $image['error'];if ( $errorCode > UPLOAD_ERR_OK) {switch ($errorCode) {case UPLOAD_ERR_INI_SIZE:throw new Exception('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值');break;case UPLOAD_ERR_FORM_SIZE:throw new Exception('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值');break;case UPLOAD_ERR_PARTIAL:throw new Exception('文件只有部分被上传');break;case UPLOAD_ERR_NO_FILE:throw new Exception('没有文件被上传');break;case UPLOAD_ERR_NO_TMP_DIR:throw new Exception('找不到临时文件夹');break;case UPLOAD_ERR_CANT_WRITE:throw new Exception('文件写入失败');break;default:throw new Exception('未知类型错误');}}// 2. 判断临时文件是否合法?$tmpFile = $image['tmp_name'];// 设置允许上传文件类型$allowFileTypes = ['jpg', 'jpeg', 'png', 'gif'];if (true === is_uploaded_file($tmpFile)) {// 获取上传文件的扩展名$extension = pathinfo($image['name'])['extension'];if (in_array($extension, $allowFileTypes)) {// 目标文件名$destName = 'uploads/' . md5($image['name']).time() . '.' . $extension;// 3. 将临时文件移动到用户目录中if (move_uploaded_file($tmpFile, $destName)) {echo '<script>alert("上传成功");location.href="form2.html";</script>';}} else {throw new Exception('文件类型错误');}} else {throw new Exception('非法操作');}} catch (Exception $e) {echo $e->getMessage();}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号