当前位置:Gxlcms > PHP教程 > 总结三种php多文件上传的方法

总结三种php多文件上传的方法

时间:2021-07-01 10:21:17 帮助过:16人阅读

介绍三种多文件上传的方法,前两种都是直接遍历三维超全局数组$_FILES,最后一种是先定义一个单文件上传函数,再循环调用该函数,完成多文件的上传。

  1. 1.当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,
  2. 也即表单为这种形式:
  3. <!--lang:html-->
  4. <form action="" method="post" enctype="multipart/form-data">
  5. <input type="hidden" name="MAX_FILE_SIZE" value="">
  6. <input type="file" name="pic[]" /><br><br>
  7. <input type="file" name="pic[]" /><br><br>
  8. <input type="file" name="pic[]" /><br><br>
  9. <input type="file" name="pic[]" /><br><br>
  10. <input type="submit" value="upload"/>
  11. </form>
  12. 可用foreach 循环 上传多个文件:
  13. //1.获取要上传文件的信息
  14. $up_info=$_FILES['pic'];
  15. $ob_path="../system";
  16. $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
  17. for($i=0;$i<count($up_info['name']);$i++){ //foreach 循环处理多个文件上传
  18. //2.判断文件是否上传错误
  19. if($up_info['error'][$i]>0){
  20. switch($up_info['error'][$i]){
  21. case 1:
  22. $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
  23. break;
  24. case 2:
  25. $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
  26. break;
  27. case 3:
  28. $err_info="文件只有部分被上传";
  29. break;
  30. case 4:
  31. $err_info="没有文件被上传";
  32. break;
  33. case 6:
  34. $err_info="找不到临时文件夹";
  35. break;
  36. case 7:
  37. $err_info="文件写入失败";
  38. break;
  39. default:
  40. $err_info="未知的上传错误";
  41. break;
  42. }
  43. continue($err_info);
  44. }
  45. //3.判断文件上传的类型是否合法
  46. if(!in_array($up_info['type'][$i],$typelist)){
  47. continue('文件类型错误!'.$up_info['type'][$i]);
  48. }
  49. //4.上传文件的大小过滤
  50. if($up_info['size'][$i]>1000000){
  51. continue('文件大小超过1000000');
  52. }
  53. //5.上传文件名处理
  54. $exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);
  55. do{
  56. $main_name=date('YmHis'.'--'.rand(100,999));
  57. $new_name=$main_name.'.'.$exten_name;
  58. }while(file_exists($to_path.'/'.$new_name));
  59. //6.判断是否是上传的文件,并执行上传
  60. if(is_uploaded_file($up_info['tmp_name'][$i])){
  61. if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){
  62. echo '文件上传成功!';
  63. }else{
  64. echo '上传文件移动失败!';
  65. }
  66. }else{
  67. echo '文件不是上传的文件';
  68. }
  69. } //for循环的括号
  70. 2.当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时,
  71. 也即表单为这种形式:
  72. <form action="" method="post" enctype="multipart/form-data">
  73. <input type="hidden" name="MAX_FILE_SIZE" value="">
  74. <input type="file" name="pic" /><br><br>
  75. <input type="file" name="text" /><br><br>
  76. <input type="file" name="doc" /><br><br>
  77. <input type="file" name="pdf" /><br><br>
  78. <input type="submit" value="upload"/>
  79. </form>
  80. 也可用foreach 循环 上传多个文件:
  81. //1.获取要上传文件的信息
  82. $up_info=$_FILES;
  83. $ob_path="..\system";
  84. $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
  85. foreach($up_info as $k_name=>$value){ //用foreach循环 处理多个文件的上传
  86. //2.判断文件是否上传错误
  87. if($up_info[$k_name]['error']>0){
  88. switch($up_info['error'][$i]){
  89. case 1:
  90. $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
  91. break;
  92. case 2:
  93. $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
  94. break;
  95. case 3:
  96. $err_info="文件只有部分被上传";
  97. break;
  98. case 4:
  99. $err_info="没有文件被上传";
  100. break;
  101. case 6:
  102. $err_info="找不到临时文件夹";
  103. break;
  104. case 7:
  105. $err_info="文件写入失败";
  106. break;
  107. default:
  108. $err_info="未知的上传错误";
  109. break;
  110. }
  111. continue($err_info);
  112. }
  113. //3.判断文件上传的类型是否合法
  114. if(!in_array($up_info[$k_name]['type'],$typelist)){
  115. continue('文件类型错误!'.$up_info[$k_name]['type']);
  116. }
  117. //4.上传文件的大小过滤
  118. if($up_info[$k_name]['size']>100000){
  119. echo '文件大小超过**';
  120. continue;
  121. }
  122. //5.上传文件名处理
  123. $exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);
  124. do{
  125. $main_name=date('YmHis'.'--'.rand(100,999));
  126. $new_name=$main_name.'.'.$exten_name;
  127. }while(file_exists($to_path.'/'.$new_name));
  128. //6.判断是否是上传的文件,并执行上传
  129. if(is_uploaded_file($up_info[$k_name]['tmp_name'])){
  130. if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){
  131. echo '文件上传成功!';
  132. }else{
  133. echo '上传文件移动失败!';
  134. }
  135. }else{
  136. echo '文件不是上传的文件';
  137. }
  138. } //for循环的括号
  139. //3.上面的循环是嵌入到文件上传的代码中的,可能有点不好理解,这儿提供第三种法,
  140. //先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,
  141. //也可以到达多文件上传的目的,而且这种方式,更容易理解。
  142. //上传的表单的形式和第二种方法中的相同,即:
  143. <form action="" method="post" enctype="multipart/form-data">
  144. <input type="hidden" name="MAX_FILE_SIZE" value="">
  145. <input type="file" name="pic1" ><br>
  146. <input type="file" name="pic2"><br>
  147. <input type="file" name="pic3"><br>
  148. <input type="submit" value="upload">
  149. </form>
  150. //定义函数如下:
  151. /*
  152. *单文件上传函数
  153. *@param array $up_info 记录上传文件信息的超全局数组
  154. *@param string $to_path 上传文件的目标路径
  155. *@param array $typlist 允许的文件类型
  156. *@param int $file_size允许的文件大小
  157. *@return string 上传失败,返回失败的原因,
  158. *
  159. * 成功返回包括文件名的路径。
  160. */
  161. function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){
  162. //1.判断文件上传是否错误
  163. if($up_file['error']>0){
  164. switch($up_info['error']){
  165. case 1:
  166. $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
  167. break;
  168. case 2:
  169. $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
  170. break;
  171. case 3:
  172. $err_info="文件只有部分被上传";
  173. break;
  174. case 4:
  175. $err_info="没有文件被上传";
  176. break;
  177. case 6:
  178. $err_info="找不到临时文件夹";
  179. break;
  180. case 7:
  181. $err_info="文件写入失败";
  182. break;
  183. default:
  184. $err_info="未知的上传错误";
  185. break;
  186. }
  187. return $err_info;
  188. die();
  189. }
  190. //2.判断上传文件类型是否合法
  191. if(count($typelist)>0){
  192. if(!in_array($up_info['type'],$typelist)){
  193. $err_info='文件类型不合法!'.$up_info['type'];
  194. return $err_info;
  195. die();
  196. }
  197. }
  198. //4.判断上传文件大小是否超出允许值
  199. if($up_info['size']>$file_size){
  200. return $err_info='文件大小超过'.$file_size;
  201. die();
  202. }
  203. //5.上传文件重命名
  204. $exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);
  205. do{
  206. $main_name=date('YmHis'.'--'.rand(100,999));
  207. $new_name=$main_name.'.'.$exten_name;
  208. }while(file_exists($to_path.'/'.$new_name));
  209. //6.判断是否是上传的文件,并移动文件
  210. if(is_uploaded_file($up_info['tmp_name'])){
  211. if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){
  212. $err_info=$to_path.'/'.$new_name;
  213. return $err_info;
  214. die();
  215. }else{
  216. return $err_info='上传文件移动失败!';
  217. die();
  218. }
  219. }else{
  220. return $err_info='这个文件不是上传文件!';
  221. die();
  222. }
  223. }
  224. //函数使用方法如下
  225. $multi_info=$_FILES; //接收$_FILES的全部上传信息
  226. $to_path='system'; //上传文件的目标路径
  227. foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info
  228. $err_info=upload_fun($up_info,$to_path); //调用单文件上传函数
  229. p($err_info); //
输出返回信息; }

以上就是总结三种php多文件上传的方法的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行