其实多文件上传和单文件上传大同小异,原理都是一样的,只是在代码上做了点小技巧。
首先还是index.html上传表单,只是把之前上传文件表单里的file更改成了file[]
复制代码
upload files
上传文件:
上传文件:
上传文件:
复制代码
在upload.php用$_files打印看看
得出下面多维数组
复制代码
array
(
[file] => array
(
[name] => array
(
[0] => 照片1.jpg
[1] => 照片2.jpg
[2] => 照片3.jpg
)
[type] => array
(
[0] => image/jpeg
[1] => image/jpeg
[2] => image/jpeg
)
[tmp_name] => array
(
[0] => f:\wamp\tmp\php36c7.tmp
[1] => f:\wamp\tmp\php36c8.tmp
[2] => f:\wamp\tmp\php36c9.tmp
)
[error] => array
(
[0] => 0
[1] => 0
[2] => 0
)
[size] => array
(
[0] => 0
[1] => 0
[2] => 0
)
)
)
复制代码
按照单文件上传的原理,先想想我们需要得到什么?
很明显我们需要得到一个关于文件信息的数组,数组里包含name,type,tmp_name,error,size,而此时我们得到的是个多维数组,虽然对应的键值都存在,但它是多维的,
我们只需要把它拆分,比如上面的3个文件,我们只需要把它拆分成对应的3个文件信息数组就行了。
拆分数组的结构
复制代码
array
(
[0] => array
(
[name] => 照片1.jpg
[type] => image/jpeg
[tmp_name] => f:\wamp\tmp\php13c1.tmp
[error] => 0
[size] => 385150
)
[1] => array
(
[name] => 照片2.jpg
[type] => image/jpeg
[tmp_name] => f:\wamp\tmp\php13d2.tmp
[error] => 0
[size] => 242043
)
[2] => array
(
[name] => 照片3.jpg
[type] => image/jpeg
[tmp_name] => f:\wamp\tmp\php13d3.tmp
[error] => 0
[size] => 488293
)
)
复制代码
下面是拆分重组数组代码
复制代码
复制代码
剩下的东西就简单了,重复单文件上传的步骤,遍历处理一遍该数组就行了。
代码如下:
复制代码
0){
//上传文件错误编号判断
switch ($fileerror) {
case 1:
$message=上传的文件超过了php.ini 中 upload_max_filesize 选项限制的值。;
break;
case 2:
$message=上传文件的大小超过了 html 表单中 max_file_size 选项指定的值。;
break;
case 3:
$message=文件只有部分被上传。;
break;
case 4:
$message=没有文件被上传。;
break;
case 6:
$message=找不到临时文件夹。;
break;
case 7:
$message=文件写入失败;
break;
case 8:
$message=由于php的扩展程序中断了文件上传;
break;
}
exit(文件上传失败:.$message);
}
if(!is_uploaded_file($tempname)){
//判断是否是post上传过来的文件
exit(不是通过http post方式上传上来的);
}else{
if(!in_array($filetype, $typelist)){
exit(上传的文件不是指定类型);
}else{
if(!getimagesize($tempname)){
//避免用户上传恶意文件,如把病毒文件扩展名改为图片格式
exit(上传的文件不是图片);
}
}
if($filesize>1000000){
//对特定表单的上传文件限制大小
exit(上传文件超出限制大小);
}else{
//避免上传文件的中文名乱码
$filename=iconv(utf-8, gbk, $filename);//把iconv抓取到的字符编码从utf-8转为gbk输出
$filename=str_replace(., time().., $filename);//在图片名称后加入时间戳,避免重名文件覆盖
if(move_uploaded_file($tempname, uploads/.$filename)){
echo 上传文件成功!;
}else{
echo 上传文件失败;
}
}
}
}
?>