时间:2021-07-01 10:21:17 帮助过:16人阅读
输出返回信息; }
- 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['pic'];
- $ob_path="../system";
- $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型
- for($i=0;$i<count($up_info['name']);$i++){ //foreach 循环处理多个文件上传
- //2.判断文件是否上传错误
- if($up_info['error'][$i]>0){
- switch($up_info['error'][$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['type'][$i],$typelist)){
- continue('文件类型错误!'.$up_info['type'][$i]);
- }
- //4.上传文件的大小过滤
- if($up_info['size'][$i]>1000000){
- continue('文件大小超过1000000');
- }
- //5.上传文件名处理
- $exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);
- do{
- $main_name=date('YmHis'.'--'.rand(100,999));
- $new_name=$main_name.'.'.$exten_name;
- }while(file_exists($to_path.'/'.$new_name));
- //6.判断是否是上传的文件,并执行上传
- if(is_uploaded_file($up_info['tmp_name'][$i])){
- if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){
- echo '文件上传成功!';
- }else{
- echo '上传文件移动失败!';
- }
- }else{
- echo '文件不是上传的文件';
- }
- } //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]['error']>0){
- switch($up_info['error'][$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]['type'],$typelist)){
- continue('文件类型错误!'.$up_info[$k_name]['type']);
- }
- //4.上传文件的大小过滤
- if($up_info[$k_name]['size']>100000){
- echo '文件大小超过**';
- continue;
- }
- //5.上传文件名处理
- $exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);
- do{
- $main_name=date('YmHis'.'--'.rand(100,999));
- $new_name=$main_name.'.'.$exten_name;
- }while(file_exists($to_path.'/'.$new_name));
- //6.判断是否是上传的文件,并执行上传
- if(is_uploaded_file($up_info[$k_name]['tmp_name'])){
- if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){
- echo '文件上传成功!';
- }else{
- echo '上传文件移动失败!';
- }
- }else{
- echo '文件不是上传的文件';
- }
- } //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['error']>0){
- switch($up_info['error']){
- 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['type'],$typelist)){
- $err_info='文件类型不合法!'.$up_info['type'];
- return $err_info;
- die();
- }
- }
- //4.判断上传文件大小是否超出允许值
- if($up_info['size']>$file_size){
- return $err_info='文件大小超过'.$file_size;
- die();
- }
- //5.上传文件重命名
- $exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);
- do{
- $main_name=date('YmHis'.'--'.rand(100,999));
- $new_name=$main_name.'.'.$exten_name;
- }while(file_exists($to_path.'/'.$new_name));
- //6.判断是否是上传的文件,并移动文件
- if(is_uploaded_file($up_info['tmp_name'])){
- if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){
- $err_info=$to_path.'/'.$new_name;
- return $err_info;
- die();
- }else{
- return $err_info='上传文件移动失败!';
- die();
- }
- }else{
- return $err_info='这个文件不是上传文件!';
- die();
- }
- }
- //函数使用方法如下
- $multi_info=$_FILES; //接收$_FILES的全部上传信息
- $to_path='system'; //上传文件的目标路径
- foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info
- $err_info=upload_fun($up_info,$to_path); //调用单文件上传函数
- p($err_info); //
以上就是总结三种php多文件上传的方法的详细内容,更多请关注Gxl网其它相关文章!