博客列表 >文件上传以及错误处理

文件上传以及错误处理

xueblog9的进阶之旅
xueblog9的进阶之旅原创
2022年08月21日 19:16:55735浏览

文件上传以及错误处理

文件上传

  1. 支持文件上传的表单,超全局变量:$_FILES是个关联数组,接受上传文件的,表单name属性,为其键名
  2. 支持文件上传的表单,两个必须的参数
    2.1 method:POST,POST请求,
    2.2 ecntype: multipart/form-data,原始的原件流上传

  3. 错误处理
    3.1 isset():判断某个数组中是否存在某个键,返回布尔值
    3.2 通过error返回值进行响应的错误处理
    3.2.1 error=1:大小超过了php.ini中的允许上传的文件大小
    3.2.2 error=2:大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小
    3.2.3 error=3:文件只有部分被上传
    3.2.4 error=4:没有文件上传
    3.2.5 error=6:找不到临时目录
    3.2.6 error=7:文件写入失败,请检查目录权限
    3.2.7 error=0:0=>UPLOAD_EER_OK,表示上传成功
    3.3 is_uploaded_file:判断是上传方式是否为post;
    3.4 pathinfo()[‘extension’]:提取文件名的扩展名,用于判断格式,是否符合需求
    3.5 in_array():判断字符串(扩展名)是否在某一个数组中(白名单);
    3.6 md5():文件名加密,避免同名文件上传异常
    3.7 move_uploaded_file():将临时文件移动到目标目录中,两个目录均需要具体到文件名

  4. 单个文件上传,一个type=file的input即可,name属性为超全局变量$_FILES的键;

  5. 多个文件上传-逐个上传:多个type=file的input即可,且name属性不重复,使用foreach遍历超全局变量$_FILES的二维数组
  6. 多个文件上传-逐个上传:多个input中name属性加上’[]’,使用foreach遍历超全局变量$_FILES的三维数组,文件的属性归类并且各自组成二维数组;
  7. 多个文件上传-一起上传:一个input中name属性加上’[]’并且新增multiple属性,使用foreach遍历超全局变量$_FILES的三维数组,文件的属性归类并且各自组成二维数组;

其他

  1. ‘==’两个等号是可以自动转换数据类型
  2. 文件上传表单标签
    2.1 双标签:<form method="POST" enctype="multipart/form-data">
    2.2 双标签:<fieldset>
    2.3 双标签:<legend>
    2.4 双标签:<button>
    2.5 单标签:<input type="file" name="my_test" >,name属性与超全局变量$_FILES的数组键绑定,name=”my_test[]”,如加上‘[]’,超全局变量关于‘my_test’这个键位,就是三维数组

案例源码

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. if (isset($_FILES['my_test'])){
  4. foreach($_FILES['my_test']['error'] as $key=>$error){
  5. $name = $_FILES['my_test']['name'][$key];
  6. $tmpname = $_FILES['my_test']['tmp_name'][$key];
  7. switch($error){
  8. case 0:
  9. if (is_uploaded_file($tmpname)){
  10. $allow=['jpg','jpeg','png','gif'];
  11. $exname=pathinfo($name)['extension'];
  12. if(in_array($exname,$allow)){
  13. $depath = 'pic/'.md5($name).'.'.$exname;
  14. if(move_uploaded_file($tmpname,$depath)){
  15. echo '<p>上传成功</p>';
  16. echo "<img src='$depath' width='50'>";
  17. }else{
  18. }
  19. }else{
  20. echo '<p>文件类型错误</p>';
  21. }
  22. }else{
  23. echo '<p>非POST请求</p>';
  24. }
  25. break;
  26. case 1:
  27. echo '大小超过了php.ini中的允许上传的文件大小';
  28. break;
  29. case 2:
  30. echo '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';
  31. break;
  32. case 3:
  33. echo '文件只有部分被上传';
  34. break;
  35. case 4:
  36. echo '没有文件被上传';
  37. break;
  38. case 6:
  39. echo '找不到临时目录';
  40. break;
  41. case 7:
  42. echo '文件写入失败,请检查目录权限';
  43. break;
  44. }
  45. }
  46. }
  47. ?>
  48. <!DOCTYPE html>
  49. <html lang="zh-CN">
  50. <head>
  51. <meta charset="UTF-8">
  52. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  53. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  54. <title>文件上传的表单</title>
  55. </head>
  56. <body>
  57. <form action="" method="POST" enctype="multipart/form-data">
  58. <fieldset>
  59. <legend>文件上传</legend>
  60. <!-- 限制上传文件大小的,单位是字节,type类型为hidden,name属性为MAX_FILE_SIZE; -->
  61. <!-- <input type="hidden" name="MAX_FILE_SIZE" value="800000"> -->
  62. <!-- 多文件上传 -->
  63. <input type="file" name="my_test[]" multiple>
  64. <!-- 单文件上传 -->
  65. <!-- <input type="file" name="my_test" > -->
  66. <button>上传</button>
  67. </fieldset>
  68. </form>
  69. </body>
  70. </html>

案例结果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议