多文件上传php怎么写


方法一:当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,也即表单为这种形式。
HTML代码:
1    <form action="" method="post" enctype="multipart/form-data">    
2    <input type="hidden" name="MAX_FILE_SIZE" value="">    
3    <input type="file" name="pic[]" /><br><br>    
4    <input type="file" name="pic[]" /><br><br>    
5    <input type="file" name="pic[]" /><br><br>    
6    <input type="file" name="pic[]" /><br><br>    
7    <input type="submit" value="upload"/>    
8    </form>    
PHP代码:
01    <?php    
02    //1.获取要上传文件的信息    
03    $up_info=$_FILES['pic'];    
04         
05    $ob_path="../system";    
06         
07    $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型    
08         
09         
10    for($i=0;$i<count($up_info['name']);$i++){ //foreach 循环处理多个文件上传    
11        //2.判断文件是否上传错误    
12         
13        if($up_info['error'][$i]>0){    改者
14            switch($up_info['error'][$i]){    
15                case 1:    
16                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";    
17                    break;    
18                case 2:    
19                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选衫旅项指定的值";    
20                    break;    
21                case 3:    
22                    $err_info="文件只有部分被上传";    
23                    break;    
24                case 4:    
25                    $err_info="没有文件被上传";    
26               或歼凳     break;    
27                case 6:    
28                    $err_info="找不到临时文件夹";    
29                    break;    
30                case 7:    
31                    $err_info="文件写入失败";    
32                    break;    
33                default:    
34                    $err_info="未知的上传错误";    
35                    break;    
36            }    
37            continue($err_info);    
38        }    
39         
40         
41        //3.判断文件上传的类型是否合法    
42         
43        if(!in_array($up_info['type'][$i],$typelist)){    
44            continue('文件类型错误!'.$up_info['type'][$i]);    
45        }    
46         
47        //4.上传文件的大小过滤    
48         
49        if($up_info['size'][$i]>1000000){    
50            continue('文件大小超过1000000');    
51        }    
52         
53         
54        //5.上传文件名处理    
55         
56        $exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);    
57         
58        do{    
59            $main_name=date('YmHis'.'--'.rand(100,999));    
60            $new_name=$main_name.'.'.$exten_name;    
61        }while(file_exists($to_path.'/'.$new_name));    
62         
63         
64         
65        //6.判断是否是上传的文件,并执行上传    
66         
67        if(is_uploaded_file($up_info['tmp_name'][$i])){    
68         
69            if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){    
70                echo '文件上传成功!';    
71            }else{    
72                echo '上传文件移动失败!';    
73            }    
74        }else{    
75            echo '文件不是上传的文件';    
76        }    
77         
78    } //for循环的括号    
方法二:当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时
也即表单为这种形式:
1    <form action="" method="post" enctype="multipart/form-data">    
2    <input type="hidden" name="MAX_FILE_SIZE" value="">    
3    <input type="file" name="pic" /><br><br>    
4    <input type="file" name="text" /><br><br>    
5    <input type="file" name="doc" /><br><br>    
6    <input type="file" name="pdf" /><br><br>    
7         
8    <input type="submit" value="upload"/>    
9    </form>    
01    //1.获取要上传文件的信息    
02    $up_info=$_FILES;    
03         
04    $ob_path="..system";    
05         
06    $typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型    
07         
08         
09         
10    foreach($up_info as $k_name=>$value){ //用foreach循环 处理多个文件的上传    
11        //2.判断文件是否上传错误    
12         
13        if($up_info[$k_name]['error']>0){    
14            switch($up_info['error'][$i]){    
15                case 1:    
16                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";    
17                    break;    
18                case 2:    
19                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";    
20                    break;    
21                case 3:    
22                    $err_info="文件只有部分被上传";    
23                    break;    
24                case 4:    
25                    $err_info="没有文件被上传";    
26                    break;    
27                case 6:    
28                    $err_info="找不到临时文件夹";    
29                    break;    
30                case 7:    
31                    $err_info="文件写入失败";    
32                    break;    
33                default:    
34                    $err_info="未知的上传错误";    
35                    break;    
36            }    
37            continue($err_info);    
38        }    
39         
40         
41        //3.判断文件上传的类型是否合法    
42         
43        if(!in_array($up_info[$k_name]['type'],$typelist)){    
44            continue('文件类型错误!'.$up_info[$k_name]['type']);    
45        }    
46         
47        //4.上传文件的大小过滤    
48         
49        if($up_info[$k_name]['size']>100000){    
50            echo '文件大小超过**';    
51            continue;    
52        }    
53         
54         
55        //5.上传文件名处理    
56         
57        $exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);    
58         
59        do{    
60            $main_name=date('YmHis'.'--'.rand(100,999));    
61            $new_name=$main_name.'.'.$exten_name;    
62        }while(file_exists($to_path.'/'.$new_name));    
63         
64         
65        //6.判断是否是上传的文件,并执行上传    
66         
67        if(is_uploaded_file($up_info[$k_name]['tmp_name'])){    
68         
69            if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){    
70                echo '文件上传成功!';    
71            }else{    
72                echo '上传文件移动失败!';    
73            }    
74        }else{    
75            echo '文件不是上传的文件';    
76        }    
77         
78    } //for循环的括号    
方法三:先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,也可以到达多文件上传的目的,而且这种方式,更容易理解。
1    <form action="" method="post" enctype="multipart/form-data">    
2    <input type="hidden" name="MAX_FILE_SIZE" value="">    
3    <input type="file" name="pic1" ><br>    
4    <input type="file" name="pic2"><br>    
5    <input type="file" name="pic3"><br>    
6    <input type="submit" value="upload">    
7    </form>    
001    /*    
002    *单文件上传函数    
003    *@param array $up_info 记录上传文件信息的超全局数组    
004    *@param string $to_path 上传文件的目标路径    
005    *@param array $typlist 允许的文件类型    
006    *@param int $file_size允许的文件大小    
007    *@return string 上传失败,返回失败的原因,    
008    * http://yige.org/php/    
009    * 成功返回包括文件名的路径。    
010    */    
011         
012         
013    function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){    
014         
015        //1.判断文件上传是否错误    
016         
017        if($up_file['error']>0){    
018            switch($up_info['error']){    
019                case 1:    
020                    $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";    
021                    break;    
022                case 2:    
023                    $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";    
024                    break;    
025                case 3:    
026                    $err_info="文件只有部分被上传";    
027                    break;    
028                case 4:    
029                    $err_info="没有文件被上传";    
030                    break;    
031                case 6:    
032                    $err_info="找不到临时文件夹";    
033                    break;    
034                case 7:    
035                    $err_info="文件写入失败";    
036                    break;    
037                default:    
038                    $err_info="未知的上传错误";    
039                    break;    
040            }    
041         
042            return $err_info;    
043            die();    
044        }    
045         
046         
047        //2.判断上传文件类型是否合法    
048         
049        if(count($typelist)>0){    
050            if(!in_array($up_info['type'],$typelist)){    
051         
052                $err_info='文件类型不合法!'.$up_info['type'];    
053                return $err_info;    
054                die();    
055            }    
056        }    
057         
058        //4.判断上传文件大小是否超出允许值    
059         
060        if($up_info['size']>$file_size){    
061         
062            return $err_info='文件大小超过'.$file_size;    
063            die();    
064        }    
065         
066        //5.上传文件重命名    
067         
068        $exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);    
069         
070        do{    
071            $main_name=date('YmHis'.'--'.rand(100,999));    
072            $new_name=$main_name.'.'.$exten_name;    
073        }while(file_exists($to_path.'/'.$new_name));    
074         
075        //6.判断是否是上传的文件,并移动文件    
076         
077        if(is_uploaded_file($up_info['tmp_name'])){    
078         
079            if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){    
080         
081                $err_info=$to_path.'/'.$new_name;    
082                return $err_info;    
083                die();    
084            }else{    
085         
086                return $err_info='上传文件移动失败!';    
087                die();    
088         
089            }    
090        }else{    
091         
092            return $err_info='这个文件不是上传文件!';    
093            die();    
094        }    
095         
096    }    
097         
098    //函数使用方法如下    
099         
100    $multi_info=$_FILES; //接收$_FILES的全部上传信息    
101         
102    $to_path='system'; //上传文件的目标路径    
103         
104    foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info    
105         
106        $err_info=upload_fun($up_info,$to_path); //调用单文件上传函数    
107         
108        p($err_info); //输出返回信息;    
109         
110    }