Blogger Information
Blog 119
fans 3
comment 1
visits 94684
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 文件上传------PHP第十期线上班 学号:510251 02月19日作业
赵大叔
Original
519 people have browsed it

文件上传

相关知识点:

1、PHP配置:

  • 1.1 file_upload: On / Off 是否允许上传文件
  • 1.2 upload_tmp_dir: 文件上传临时目录
  • 1.3 upload_max_filesize: 默认32M, 单个文件上传的最大尺寸
  • 1.4 post_max_size: 允许通过post方式提交的数据量大小, 至少要大于upload_max_filesize
  • 1.5 max_file_uploads: 默认20, 单个请求, 允许上传的最大文件数量

2、相关函数:

  • 2.1 is_uploaded_file(): 检测是否是通过POST方式上传的文件,——检测临时文件是否合法
  • 2.2 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, 文件写入失败, 上传目录无写的权限


单文件上传

html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>PDF文件上传</title>
  6. </head>
  7. <body>
  8. <!-- action:处理上传脚本, method: 必须是POST, multipart/form-data:允许接收表单提交的文件 -->
  9. <form action="demo2.php" method="POST" enctype="multipart/form-data">
  10. <fieldset>
  11. <legend>PDF文件上传</legend>
  12. <!-- 这个上传文件大小的限制字段,必须写到file字段的前面 -->
  13. <input type="hidden" name="MAX_FILE_SIZE" value="600">
  14. <input type="file" name="user_pic">
  15. <button>上传</button>
  16. </fieldset>
  17. </form>
  18. </body>
  19. </html>

php代码

  1. <?php
  2. namespace chapter8;
  3. use Exception;
  4. // 处理用户文件上传
  5. try {
  6. // 1. 判断文件是否上传成功:查看user_pic键下error的值
  7. $errorCode = $_FILES['user_file']['error'];
  8. if ( $errorCode > UPLOAD_ERR_OK) {
  9. switch ($errorCode) {
  10. case UPLOAD_ERR_INI_SIZE:
  11. throw new Exception('上传的文件超过了php.ini中upload_max_filesize选项限制的值');
  12. break;
  13. case UPLOAD_ERR_FORM_SIZE:
  14. throw new Exception('上传文件的大小超过了HTML表单中 MAX_FILE_SIZE选项指定的值');
  15. break;
  16. case UPLOAD_ERR_PARTIAL:
  17. throw new Exception('文件只有部分被上传');
  18. break;
  19. case UPLOAD_ERR_NO_FILE:
  20. throw new Exception('没有文件被上传');
  21. break;
  22. case UPLOAD_ERR_NO_TMP_DIR:
  23. throw new Exception('找不到临时文件夹');
  24. break;
  25. case UPLOAD_ERR_CANT_WRITE:
  26. throw new Exception('文件写入失败');
  27. break;
  28. default:
  29. throw new Exception('未知类型错误');
  30. }
  31. }
  32. // 2. 判断临时文件是否合法:
  33. $tmpFile = $_FILES['user_file']['tmp_name'];
  34. if (true === is_uploaded_file($tmpFile)) {
  35. // 获取上传文件的扩展名
  36. $extension = pathinfo($_FILES['user_file']['name'])['extension'];
  37. if ($extension === 'pdf') {
  38. // 目标文件名
  39. $destName = 'uploads/' . md5($_FILES['user_file']['name']).time() . '.' . $extension;
  40. // 3. 将临时文件移动到用户目录中
  41. if (move_uploaded_file($tmpFile, $destName)) {
  42. echo '<script>alert("上传成功");location.href="form1.html";</script>';
  43. }
  44. } else {
  45. throw new Exception('文件类型错误');
  46. }
  47. } else {
  48. throw new Exception('非法操作');
  49. }
  50. } catch (Exception $e) {
  51. echo $e->getMessage();
  52. }

多文件上传

html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>上传文件</title>
  6. </head>
  7. <body>
  8. <!-- action:处理上传脚本, method: 必须是POST, multipart/form-data:允许接收表单提交的文件 -->
  9. <form action="demo3.php" method="POST" enctype="multipart/form-data">
  10. <fieldset>
  11. <legend>文件上传</legend>
  12. <!-- 控件名称有数组方式表示-->
  13. <input type="file" name="user_pic[]">
  14. <input type="file" name="user_pic[]">
  15. <input type="file" name="user_pic[]">
  16. <input type="file" name="user_pic[]">
  17. <button>上传</button>
  18. </fieldset>
  19. </form>
  20. </body>
  21. </html>

php代码

  1. <?php
  2. namespace chapter8;
  3. use Exception;
  4. // print_r($_FILES);
  5. // 目标: 将这个二维数组转为一维格式
  6. // $images: 创建一个数组保存所有已经格式化后的每个文件的信息
  7. $images = [];
  8. foreach ($_FILES as $value) {
  9. //判断是否是多文件上传:$_FILES里面任意一个键是数组就是
  10. if (is_array($value['name'])) {
  11. for ($i = 0; $i < count($value['name']); $i++) {
  12. $images[] = [
  13. 'name' => $value['name'][$i],
  14. 'type' => $value['type'][$i],
  15. 'tmp_name' => $value['tmp_name'][$i],
  16. 'error' => $value['error'][$i],
  17. 'size' => $value['size'][$i],
  18. ];
  19. }
  20. }
  21. }
  22. echo '<hr>';
  23. //print_r($images);
  24. //再次遍历获取到的数组
  25. foreach ($images as $image) {
  26. try {
  27. // 1. 判断文件是否上传成功?
  28. $errorCode = $image['error'];
  29. if ( $errorCode > UPLOAD_ERR_OK) {
  30. switch ($errorCode) {
  31. case UPLOAD_ERR_INI_SIZE:
  32. throw new Exception('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值');
  33. break;
  34. case UPLOAD_ERR_FORM_SIZE:
  35. throw new Exception('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值');
  36. break;
  37. case UPLOAD_ERR_PARTIAL:
  38. throw new Exception('文件只有部分被上传');
  39. break;
  40. case UPLOAD_ERR_NO_FILE:
  41. throw new Exception('没有文件被上传');
  42. break;
  43. case UPLOAD_ERR_NO_TMP_DIR:
  44. throw new Exception('找不到临时文件夹');
  45. break;
  46. case UPLOAD_ERR_CANT_WRITE:
  47. throw new Exception('文件写入失败');
  48. break;
  49. default:
  50. throw new Exception('未知类型错误');
  51. }
  52. }
  53. // 2. 判断临时文件是否合法?
  54. $tmpFile = $image['tmp_name'];
  55. // 设置允许上传文件类型
  56. $allowFileTypes = ['jpg', 'jpeg', 'png', 'gif'];
  57. if (true === is_uploaded_file($tmpFile)) {
  58. // 获取上传文件的扩展名
  59. $extension = pathinfo($image['name'])['extension'];
  60. if (in_array($extension, $allowFileTypes)) {
  61. // 目标文件名
  62. $destName = 'uploads/' . md5($image['name']).time() . '.' . $extension;
  63. // 3. 将临时文件移动到用户目录中
  64. if (move_uploaded_file($tmpFile, $destName)) {
  65. echo '<script>alert("上传成功");location.href="form2.html";</script>';
  66. }
  67. } else {
  68. throw new Exception('文件类型错误');
  69. }
  70. } else {
  71. throw new Exception('非法操作');
  72. }
  73. } catch (Exception $e) {
  74. echo $e->getMessage();
  75. }
  76. }
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:完成的相当OK,
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post