博客列表 >实例演示单文件上传, 多文件上传(逐个,批量),重点是单文件上传与错误处理

实例演示单文件上传, 多文件上传(逐个,批量),重点是单文件上传与错误处理

P粉314265155
P粉314265155原创
2022年08月22日 08:36:40370浏览

上传文件-单文件上传

  1. <?php
  2. namespace _0818;
  3. // 上传文件步骤
  4. // 1、判断文件是否上传 (上传了不一定上传成功)
  5. // 2、判断文件 上传了是否成功(检测上传失败的原因)
  6. // 3、上传成功,判断文件上传方式是否合法
  7. // 4、上传方式合法,判断 是否允许上传的文件类型
  8. // 5、上传文件类型合法,合法,开始移动文件路径 (从临时文件路径移动到 指定文件路径)
  9. // 6、上传移动路径成功,上传成功
  10. // 7、预览测试
  11. // printf('<pre>%s</pre>',print_r($_FILES,true));
  12. // 判断文件是否上传成功
  13. // isset 判断某个变量是否存在
  14. if (isset($_FILES['my_pic'])) {
  15. // 当存在执行、、、
  16. // 原始文件名
  17. $name = $_FILES['my_pic']['name'];
  18. echo $name.'<hr>';
  19. // 临时文件名
  20. $tmpName = $_FILES['my_pic']['tmp_name'];
  21. echo $tmpName.'<hr>';
  22. // 错误代码
  23. $error = $_FILES['my_pic']['error'];
  24. echo $error.'<hr>';
  25. // error 是判断是否上传成功的关键。 不同的值代表不同的意思
  26. if ($error>0) {
  27. // echo '上传失败';
  28. // }else{
  29. // echo '上传成功,进行系一部操作';
  30. // }
  31. $tips = '<span style="color:red">上传失败!</span><br>';
  32. switch($error) {
  33. case 1:
  34. // echo '大小超过了配置文件 php.ini 允许上传的文件大小';
  35. // 拼接
  36. $tips .= '大小超过了配置文件 php.ini 允许上传的文件大小';
  37. break;
  38. case 2:
  39. // echo '大小超过了表单(name="MAX_FILE_SIZE" 值)允许上传的文件大小';
  40. $tips .= '大小超过了表单(name="MAX_FILE_SIZE" 值)允许上传的文件大小';
  41. break;
  42. }
  43. echo "<p>$tips</p>";
  44. }else{
  45. // 1、判断上传方式是否合法 方法是否为 post
  46. if(is_uploaded_file($tmpName)) {
  47. // 2、文件类型白名单
  48. $allow = ['jpg','jpeg','png','gif'];
  49. // 获取文件扩展名
  50. // print_r(pathinfo('66988b4bc84a60da7e21c8e50e7e32d7.jpg')) ;
  51. $ext = pathinfo($name)['extension'];
  52. //in_array(要查询的值,对比数组) 判断值是否存在
  53. if(in_array($ext,$allow)){
  54. // 如果上传方式合法,且是允许的类型则可以移动到指定的目标目录
  55. // 设置指定路径
  56. $path = 'uploads/';
  57. // 为了防止 同名覆盖 ,应该给 目标文件名重命名
  58. $dest = $path.md5($name).rand(1,100).'.'.$ext;
  59. // 移动 ,将文件从临时目录 移动到指定目标目录
  60. if(move_uploaded_file($tmpName,$dest)){
  61. echo '上传移动成功,上传成功';
  62. // 上传预览
  63. echo "<img src ='$dest' width='500'>";
  64. }else {
  65. echo '上传移动失败';
  66. }
  67. }else{
  68. echo '文件类型错误';
  69. }
  70. }else{
  71. echo '上传方法错误';
  72. }
  73. }
  74. // if (isset($_FILES['my_pic'])) {
  75. // // 原始文件名
  76. // $name = $_FILES['my_pic']['name'];
  77. // // 临时文件名
  78. // $tmpName = $_FILES['my_pic']['tmp_name'];
  79. // // 错误代码
  80. // $error = $_FILES['my_pic']['error'];
  81. // if ($error >0) {
  82. // $tips = '<span style="color:red">上传失败!</span><br>';
  83. // switch ($error) {
  84. // case 1:
  85. // $tips .= '大小超过了php.ini中的允许上传的文件大小';
  86. // break;
  87. // case 2:
  88. // $tips .= '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';
  89. // break;
  90. // case 3:
  91. // $tips .= '文件只有部分被上传';
  92. // break;
  93. // case 4:
  94. // $tips .= '没有文件被上传';
  95. // break;
  96. // case 6:
  97. // $tips .= '找不到临时目录';
  98. // break;
  99. // case 7:
  100. // $tips .= '文件写入失败,请检查目录权限';
  101. // break;
  102. // }
  103. // echo "<p>$tips</p>";
  104. // } else {
  105. // //1 判断上传方式是否合法? POST
  106. // if (is_uploaded_file($tmpName)) {
  107. // // 文件类型白名单
  108. // $allow = ['jpg','jpeg','png','gif'];
  109. // // 扩展名
  110. // $ext = pathinfo($name)['extension'];
  111. // if (in_array($ext, $allow)) {
  112. // // 如果上传方式合法,且是允许的类型,则可以移动到指定的目录中了
  113. // $path = 'uploads/';
  114. // // 为了防止同名覆盖,应该给目标文件名重命名
  115. // $dest =$path. md5($name) . '.' . $ext;
  116. // // 将文件从临时目录移动到目标目录中
  117. // if (move_uploaded_file($tmpName, $dest)) {
  118. // echo '<p>上传成功</p>';
  119. // // 预览
  120. // echo "<img src='$dest' width='300'>";
  121. // } else {
  122. // }
  123. // } else {
  124. // echo '<p>文件类型错误</p>';
  125. // }
  126. // } else {
  127. // echo '<p>上传方式非法</p>';
  128. // }
  129. // }
  130. }
  131. ?>
  132. <!DOCTYPE html>
  133. <html lang="zh-CN">
  134. <head>
  135. <meta charset="UTF-8">
  136. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  137. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  138. <title>支持文件上传的表单-单文件表单</title>
  139. <!-- 超全局的 遍历 数组 $FILES -->
  140. </head>
  141. <body>
  142. <!-- 上传表单必有的2个属性
  143. 1、上传方法 method :post
  144. 2、 enctype :换成 multipart/form-data ,默认的数组需修改
  145. -->
  146. <form action="" method="POST" enctype="multipart/form-data">
  147. <!-- 表单域 ---先来单文件上传
  148. -->
  149. <fieldset>
  150. <legend>单文件上传</legend>
  151. <!-- name 命名与后端代码相关联 ,给服务器 编程语言用的变量名,$_FILES
  152. 注意 使用蛇形命名 -->
  153. <!-- 限制文件上传的大小 防君子不防小人
  154. type 类型 从text 变为 hideen 不让看到 .看不到不是禁用display 哦
  155. value 值 是以字节计算的哦-->
  156. <input type="hidden" name="MAX_FILE_SIZE" value="80000000">
  157. <input type="file" name="my_pic">
  158. <button>上传</button>
  159. </fieldset>
  160. </form>
  161. </body>
  162. </html>

上传文件-多文件上传

  1. <?php
  2. namespace _0818;
  3. // 简约版 麻烦的也行 参照单文件进行多层校验 。
  4. printf('<pre>%s</pre>',print_r($_FILES,true));
  5. foreach($_FILES as $file){
  6. // 只要判断$file['error'] === 0 表示上传成功
  7. if ($file['error'] ===0) {
  8. // 暂不加密目标文件名
  9. $dest = 'uploads/' . $file['name'];
  10. // 移动到目标目录中
  11. move_uploaded_file($file['tmp_name'], $dest) ;
  12. // 预览
  13. echo "<img src='$dest' width='200'>";
  14. }
  15. };
  16. ?>
  17. <!DOCTYPE html>
  18. <html lang="zh-CN">
  19. <head>
  20. <meta charset="UTF-8">
  21. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  22. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  23. <title>支持文件上传的表单-多文件表单-逐个上传</title>
  24. <!-- 超全局的 遍历 数组 $FILES -->
  25. </head>
  26. <body>
  27. <!-- 上传表单必有的2个属性
  28. 1、上传方法 method :post
  29. 2、 enctype :换成 multipart/form-data ,默认的数组需修改
  30. -->
  31. <form action="" method="POST" enctype="multipart/form-data">
  32. <!-- 表单域 -->
  33. <fieldset>
  34. <legend>多文件上传-逐个上传</legend>
  35. <input type="file" name="my_pic1"><br>
  36. <input type="file" name="my_pic2"><br>
  37. <input type="file" name="my_pic"><br>
  38. <button>上传</button>
  39. </fieldset>
  40. </form>
  41. </body>
  42. </html>

上传文件-多文件上传-2

  1. <?php
  2. namespace _0818;
  3. // 简约版 麻烦的也行 参照单文件进行多层校验 。
  4. printf('<pre>%s</pre>',print_r($_FILES,true));
  5. // 必须校验 my_pic 是否存在 否则不能执行
  6. if (isset($_FILES['my_pic'])) {
  7. foreach ($_FILES['my_pic']['error'] as$key=>$error) {
  8. // 0 =》可以换成 UPLOAD_ERR_OK
  9. if ($error ===0) {
  10. // 临时文件名称
  11. $tmpName= $_FILES['my_pic']['tmp_name'][$key];
  12. // 原始文件名称
  13. $name= $_FILES['my_pic']['name'][$key];
  14. // 暂不加密的目标文件名称
  15. $dest = 'uploads/' . $name;
  16. // 移动到目标目录中
  17. move_uploaded_file($tmpName, $dest) ;
  18. // 预览
  19. echo "<img src='$dest' width='200'>";
  20. }
  21. };
  22. }
  23. ?>
  24. <!DOCTYPE html>
  25. <html lang="zh-CN">
  26. <head>
  27. <meta charset="UTF-8">
  28. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  29. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  30. <title>支持文件上传的表单-多文件表单-逐个上传-2</title>
  31. <!-- 超全局的 遍历 数组 $FILES -->
  32. </head>
  33. <body>
  34. <!-- 上传表单必有的2个属性
  35. 1、上传方法 method :post
  36. 2、 enctype :换成 multipart/form-data ,默认的数组需修改
  37. -->
  38. <form action="" method="POST" enctype="multipart/form-data">
  39. <!-- 表单域 -->
  40. <fieldset>
  41. <legend>多文件上传-逐个上传-2</legend>
  42. <input type="file" name="my_pic[]"><br>
  43. <input type="file" name="my_pic[]"><br>
  44. <input type="file" name="my_pic[]"><br>
  45. <button>上传</button>
  46. </fieldset>
  47. </form>
  48. </body>
  49. </html>

多文件上传-3

  1. <?php
  2. namespace _0818;
  3. // 简约版 麻烦的也行 参照单文件进行多层校验 。
  4. printf('<pre>%s</pre>',print_r($_FILES,true));
  5. // 必须校验 my_pic 是否存在 否则不能执行
  6. if (isset($_FILES['my_pic'])) {
  7. foreach ($_FILES['my_pic']['error'] as$key=>$error) {
  8. // 0 =》可以换成 UPLOAD_ERR_OK
  9. if ($error ===0) {
  10. // 临时文件名称
  11. $tmpName= $_FILES['my_pic']['tmp_name'][$key];
  12. // 原始文件名称
  13. $name= $_FILES['my_pic']['name'][$key];
  14. // 暂不加密的目标文件名称
  15. $dest = 'uploads/' . $name;
  16. // 移动到目标目录中
  17. move_uploaded_file($tmpName, $dest) ;
  18. // 预览
  19. echo "<img src='$dest' width='200'>";
  20. }
  21. };
  22. }
  23. ?>
  24. <!DOCTYPE html>
  25. <html lang="zh-CN">
  26. <head>
  27. <meta charset="UTF-8">
  28. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  29. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  30. <title>支持文件上传的表单-多文件表单-按住ctrl一起批量上传-2</title>
  31. <!-- 超全局的 遍历 数组 $FILES -->
  32. </head>
  33. <body>
  34. <!-- 上传表单必有的2个属性
  35. 1、上传方法 method :post
  36. 2、 enctype :换成 multipart/form-data ,默认的数组需修改
  37. -->
  38. <form action="" method="POST" enctype="multipart/form-data">
  39. <!-- 表单域 -->
  40. <fieldset>
  41. <legend>多文件上传-按住ctrl一起批量上传</legend>
  42. <!-- 增加一个属性 multipe 允许同时选择多个-->
  43. <!-- 与demo3.php相比,只改了二个地方 -->
  44. <!-- 1. 只保留一个my_pic[] -->
  45. <!-- 2. 加一个 multiple 属性,支持多选 -->
  46. <!-- php处理上传的代码和zuoye3.php完全一样,不用动 -->
  47. <input type="file" name="my_pic[]" multiple>
  48. <button>上传</button>
  49. </fieldset>
  50. </form>
  51. </body>
  52. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议