网站推广.NET

网站推广.NET

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

来源:互联网

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

1.当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,   也即表单为这种形式: <!--lang:html--><form action="" method="post" enctype="multipart/form-data">     <input type="hidden" name="MAX_FILE_SIZE"    value="">     <input type="file" name="pic[]" /><br><br>     <input type="file" name="pic[]" /><br><br>     <input type="file" name="pic[]" /><br><br>     <input type="file" name="pic[]" /><br><br>     <input type="submit" value="upload"/> </form> 可用foreach 循环 上传多个文件: //1.获取要上传文件的信息 $up_info=$_FILES[&#39;pic&#39;]; $ob_path="../system";   $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型 for($i=0;$i<count($up_info[&#39;name&#39;]);$i++){        //foreach 循环处理多个文件上传 //2.判断文件是否上传错误 if($up_info[&#39;error&#39;][$i]>0){     switch($up_info[&#39;error&#39;][$i]){         case 1:             $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";             break;         case 2:             $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";             break;         case 3:             $err_info="文件只有部分被上传";             break;         case 4:             $err_info="没有文件被上传";             break;         case 6:             $err_info="找不到临时文件夹";             break;         case 7:             $err_info="文件写入失败";             break;         default:             $err_info="未知的上传错误";             break;     }     continue($err_info); } //3.判断文件上传的类型是否合法 if(!in_array($up_info[&#39;type&#39;][$i],$typelist)){     continue(&#39;文件类型错误!&#39;.$up_info[&#39;type&#39;][$i]); } //4.上传文件的大小过滤 if($up_info[&#39;size&#39;][$i]>1000000){     continue(&#39;文件大小超过1000000&#39;); } //5.上传文件名处理 $exten_name=pathinfo($up_info[&#39;name&#39;][$i],PATHINFO_EXTENSION);     do{         $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));                 $new_name=$main_name.&#39;.&#39;.$exten_name;     }while(file_exists($to_path.&#39;/&#39;.$new_name)); //6.判断是否是上传的文件,并执行上传 if(is_uploaded_file($up_info[&#39;tmp_name&#39;][$i])){         if(move_uploaded_file($up_info[&#39;tmp_name&#39;][$i],$ob_path.&#39;/&#39;.$new_name)){             echo &#39;文件上传成功!&#39;;             }else{             echo &#39;上传文件移动失败!&#39;;             }     }else{         echo &#39;文件不是上传的文件&#39;;         } }   //for循环的括号 2.当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时,   也即表单为这种形式: <form action="" method="post" enctype="multipart/form-data">     <input type="hidden" name="MAX_FILE_SIZE"    value="">     <input type="file" name="pic" /><br><br>     <input type="file" name="text" /><br><br>     <input type="file" name="doc" /><br><br>     <input type="file" name="pdf" /><br><br>     <input type="submit" value="upload"/> </form> 也可用foreach 循环 上传多个文件: //1.获取要上传文件的信息 $up_info=$_FILES; $ob_path="..\system";   $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型 foreach($up_info as $k_name=>$value){   //用foreach循环 处理多个文件的上传 //2.判断文件是否上传错误 if($up_info[$k_name][&#39;error&#39;]>0){     switch($up_info[&#39;error&#39;][$i]){         case 1:             $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";             break;         case 2:             $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";             break;         case 3:             $err_info="文件只有部分被上传";             break;         case 4:             $err_info="没有文件被上传";             break;         case 6:             $err_info="找不到临时文件夹";             break;         case 7:             $err_info="文件写入失败";             break;         default:             $err_info="未知的上传错误";             break;     }     continue($err_info); } //3.判断文件上传的类型是否合法 if(!in_array($up_info[$k_name][&#39;type&#39;],$typelist)){     continue(&#39;文件类型错误!&#39;.$up_info[$k_name][&#39;type&#39;]); } //4.上传文件的大小过滤 if($up_info[$k_name][&#39;size&#39;]>100000){     echo &#39;文件大小超过**&#39;;     continue; } //5.上传文件名处理 $exten_name=pathinfo($up_info[$k_name][&#39;name&#39;],PATHINFO_EXTENSION);     do{         $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));                 $new_name=$main_name.&#39;.&#39;.$exten_name;     }while(file_exists($to_path.&#39;/&#39;.$new_name)); //6.判断是否是上传的文件,并执行上传 if(is_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;])){         if(move_uploaded_file($up_info[$k_name][&#39;tmp_name&#39;],$ob_path.&#39;/&#39;.$new_name)){             echo &#39;文件上传成功!&#39;;             }else{             echo &#39;上传文件移动失败!&#39;;             }     }else{         echo &#39;文件不是上传的文件&#39;;         } }   //for循环的括号 //3.上面的循环是嵌入到文件上传的代码中的,可能有点不好理解,这儿提供第三种法, //先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息, //也可以到达多文件上传的目的,而且这种方式,更容易理解。 //上传的表单的形式和第二种方法中的相同,即:     <form action="" method="post" enctype="multipart/form-data">         <input type="hidden" name="MAX_FILE_SIZE" value="">         <input type="file" name="pic1" ><br>                     <input type="file" name="pic2"><br>         <input type="file" name="pic3"><br>         <input type="submit" value="upload">     </form> //定义函数如下: /*  *单文件上传函数  *@param array $up_info   记录上传文件信息的超全局数组  *@param string $to_path  上传文件的目标路径  *@param array $typlist   允许的文件类型  *@param int    $file_size允许的文件大小  *@return string 上传失败,返回失败的原因,  *  *                成功返回包括文件名的路径。  */function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){     //1.判断文件上传是否错误     if($up_file[&#39;error&#39;]>0){         switch($up_info[&#39;error&#39;]){             case 1:                 $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";                 break;             case 2:                 $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";                 break;             case 3:                 $err_info="文件只有部分被上传";                 break;             case 4:                 $err_info="没有文件被上传";                 break;             case 6:                 $err_info="找不到临时文件夹";                 break;             case 7:                 $err_info="文件写入失败";                 break;             default:                 $err_info="未知的上传错误";                 break;         }         return $err_info;         die();     }     //2.判断上传文件类型是否合法     if(count($typelist)>0){         if(!in_array($up_info[&#39;type&#39;],$typelist)){             $err_info=&#39;文件类型不合法!&#39;.$up_info[&#39;type&#39;];             return $err_info;             die();         }     }     //4.判断上传文件大小是否超出允许值     if($up_info[&#39;size&#39;]>$file_size){         return $err_info=&#39;文件大小超过&#39;.$file_size;         die(); }     //5.上传文件重命名     $exten_name=pathinfo($up_info[&#39;name&#39;],PATHINFO_EXTENSION);     do{         $main_name=date(&#39;YmHis&#39;.&#39;--&#39;.rand(100,999));                 $new_name=$main_name.&#39;.&#39;.$exten_name;     }while(file_exists($to_path.&#39;/&#39;.$new_name));     //6.判断是否是上传的文件,并移动文件     if(is_uploaded_file($up_info[&#39;tmp_name&#39;])){         if(move_uploaded_file($up_info[&#39;tmp_name&#39;],$to_path.&#39;/&#39;.$new_name)){                 $err_info=$to_path.&#39;/&#39;.$new_name;             return     $err_info;                         die();             }else{             return $err_info=&#39;上传文件移动失败!&#39;;             die();                 }     }else{             return $err_info=&#39;这个文件不是上传文件!&#39;;             die();     } } //函数使用方法如下 $multi_info=$_FILES;  //接收$_FILES的全部上传信息 $to_path=&#39;system&#39;;      //上传文件的目标路径     foreach($multi_info as $name=>$up_info){      //foreach 遍历$multi_info      $err_info=upload_fun($up_info,$to_path);  //调用单文件上传函数     p($err_info);                              //输出返回信息; }
php文件上传