Blogger Information
Blog 25
fans 1
comment 0
visits 12911
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
文件上传以及错误处理
xueblog9的进阶之旅
Original
749 people have browsed it

文件上传以及错误处理

文件上传

  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>

案例结果

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
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