Blogger Information
Blog 46
fans 2
comment 0
visits 19152
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示单文件上传, 多文件上传(逐个,批量),重点是单文件上传与错误处理
P粉314265155
Original
369 people have browsed it

上传文件-单文件上传

  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>
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!