方法一:当多文件上传表单中多个上传文件的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 }
php实现:一次选择多个文件上传~
参考代码如下:
<?php
$max_files=5; //最多上传文件的个数,与 up.htm 中的 input file 控件的个数相同
$up_ok_files=0; //成功上传的文件个数
$up_folder="ups"; //保存上传文件的目标文件夹
if(isset($_FILES['myfile'])){
//由于 $_FILES['myfile'] 是个数组,所以需要使用循环遍历
for($i=0;$i<$max_files;$i++){
//如果未出错
if($_FILES['myfile']['error'][$i]==0){
if(move_uploaded_file($_FILES['myfile']['tmp_name'][$i],$up_folder."/".$_FILES['myfile']['name'][$i])){
//成功上传后,计数器增 1
$up_ok_files +=1;
}
else{
echo "在服务器中保存失败";
}
}
}
echo "成功上传 ".$up_ok_files. " 个文件";
}
?>
注意:
如果对 $_FILES['myfile'] 这个数组的结构不清楚,可以在循环之前加入这句代码将其显示出来:
print_r($_FILES['myfile']);
html5 input标签中加了一个 multiple=true,就可以选多个文件上传了,多文件跟单文件也是一样处理,你把$_FILES打印出来就知道了,就是一个个把上传的临时文件保存到你要保存的地方就行
#18451524587#
在敲PHP时,如何实现一个file选择多个文件上传?求大神指点. - ******
#关疮# 这简单.在前端代码<input type="file" name="myFile"/>中 改成这样:<input type="file" name="myFile[]"/> 多个方括号 接收的时候回变成二维数组.可以多文件了
#18451524587#
php代码 网站编程 实现上传和下载多个不同类型文件功能 - ******
#关疮# 写这样的代码没有多少难度.其实文件类型与上传和下载真的没有关系,无论什么类型都是相同的代码上传和下载.在我看来,你现在难题在于一个字段(例如三维图纸)有多个文件,这使得上传和下载的控制代码非常繁杂.有一个简便的建议...
#18451524587#
php怎样实现一个file的input,添加,上传多个文件 - ******
#关疮# $File = $_FILES['filenames']; foreach( $File['name'] as $Key => $FileName ) { $FileNames = $FileName; //上传的文件名 $FileTypes = $File['type'][$Key];//上传的文件类型 $FileSize = $File['size'][$Key];//上传的文件大小 $FileTmps = $File['tmp_...
#18451524587#
php 多文件上传 - ******
#关疮# 我先说一下music[]的意思,其实是在上传一个数组!等你上传成功后,其实应该使用 $_FILES['music']这个数组.add_new_music.php<?php$num=count($_FILES['music']['name']);//这个是你自己所上传文件名的数组(所有的即5个) echo $num."<br>"; for($i=0;$i<$num;$i++){ echo $_FILES['music']['name'][$i]."<br>"; }?>
#18451524587#
php中怎么写多文件上传 - ******
#关疮# php多文件上传和单文件上传是一样的只不过是多文件上传, 多了一个循环而已!
#18451524587#
PHP多文件上传 - ******
#关疮# <input type="file" name="file1"><br><input type="file" name="file2"><br><input type="file" name="file3"><br><input type="file" name="file4"><br> 改成<input type="file" name="file[]"><br><input type="file" name="file[]"><br><input type="file" name="file[]"><br><input type="file" name="file[]"><br>
#18451524587#
【PHP】这个多文件上传的代码解释一下.谢谢 - ******
#关疮# array_push($_FILES["picture"]["name"],""); 为什么加入空元素?这个是必须的,因为是多文件上传,单文件的时候$_FILES["picture"]["name"]返回的是数值而不是数组,用array_push给它添加一个空值让它变成数组然后才能使用array_unique去除重复文件,然后array_pop再删除那个空值.这是我的理解,仅供参考.
#18451524587#
如何实现多文件上传? - ******
#关疮# 可用多个FileUpload,自己可以写一些逻辑 用一个按钮提交,可用foreach取得每个FileUpload,用FileUpload的PostedFile得到每个上传的文件
#18451524587#
php怎么上传做个文件,要能够同时上传多个文件 ******
#关疮# 可以这样做啊, <input type="file" name="file[]" /> <input type="file" name="file[]" /> ... <input type="file" name="file[]" />
#18451524587#
php中如何上传整个文件夹里的所有文件? - ******
#关疮# 相当于多文件上传!只有用插件!我现在用的是swfupload这个插件!还不错!