PHP实现多文件上传
来源:互联网 发布:怎样安装windows 编辑:程序博客网 时间:2024/06/10 05:32
PHP实现多文件上传,与单文件上传绝大部分是相同的,不过还是有区分的地方,主要有三点:
一、前端页面:
可以出现多个文件浏览按钮,也可以设置文件浏览按钮可以选择多个文件。需要注意的是文件浏览按钮的名字是数组,因为要求上传多个文件。
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h2>上传文件</h2><form action="testFiles.php" method='post' enctype="multipart/form-data"><!--<input type='file' name="myfile[]"/><br/><input type='file' name="myfile[]"/><br/><input type='file' name="myfile[]"/><br/>--><input type='file' name="myfile[]" multiple="multiple"/><br/><input type='submit' value="上传文件"/></form></body></html>
二、如果上传的是多个文件,通过$_FILES获得的数组是三维数组;如果上传的是单个文件,通过$_FILES获得的数组是二维数组,所以这都需要判断,并且为了使用通过检测的图片文件成功上传,需要重构上传文件的信息。
其中getFiles()为上传文件信息的重构函数封装;uploadFile()为上传文件的检测函数封装,具体代码如下:
<span style="font-size:14px;"><?php//构造上传文件信息function getFiles(){$i = 0;foreach($_FILES as $file){//如果上传的是单文件的话,直接把数组赋值就可以if(is_string($file['name'])){$files[$i] = $file;$i++;//循环变量自增}elseif(is_array($file['name'])){//如果上传的是多文件的话,需要从不同的数组中提取相对应的元素foreach($file['name'] as $key=>$var){$files[$i]['name'] = $file['name'][$key];$files[$i]['type'] = $file['type'][$key];$files[$i]['tmp_name'] = $file['tmp_name'][$key];$files[$i]['error'] = $file['error'][$key];$files[$i]['size'] = $file['size'][$key];$i++;//循环变量自增}}}return $files;}function uploadFile($pic_info){//判断是否上传头像if(!empty($pic_info)){//判断文件上传到临时文件是否出错if($pic_info['error'] >0){$error_msg = '上传错误:';switch($pic_info['error']){case 1: $error_msg .= '文件大小超过了php.ini中upload_max_filesize选项限制的值!'; break;case 2: $error_msg .= '文件大小超过了表单中max_file_size选项指定的值!'; break;case 3: $error_msg .= '文件只有部分被上传!'; break;case 4: $error_msg .= '没有文件被上传!'; break;case 6: $error_msg .= '找不到临时文件夹!'; break;case 7: $error_msg .= '文件写入失败!'; break;case 8: $error_msg .= '由于PHP的扩展程序中断文件上传!'; break;default: $error_msg .='未知错误!'; break; }echo $error_msg;return false;}//获取上传文件的类型,两种方法//$type = substr(strrchr($pic_info['name'],'.'),1);$type = pathinfo($pic_info['name'],PATHINFO_EXTENSION);$allow = array('jpeg','jpg','png','gif');//判断上传文件类型if(!in_array($type,$allow)){echo '图像类型不符合要求<br/>';return false;}//检测上传文件大小是否符合大小$maxSize = 2097152; //2Mif($pic_info['size']>$maxSize){exit('上传文件过大<br/>');}//检测文件是否是通过HTTP POST方式上传的if(!is_uploaded_file($pic_info['tmp_name'])){exit('文件还是通过HTTP POST方式上传的。<br/>');}//检测上传文件是否为真实的图片类型if(!getimagesize($pic_info['tmp_name'])){exit('不是一个真实的图片类型。<br/>');}//为上传文件起唯一的名字,确保不被覆盖//$new_file = $pic_info['id'].'.jpg';$unique = md5(uniqid(microtime(true),true)).'.'.$type;//如果指定目录不存在,则创建目录$uploadPath = 'upload';if(!file_exists($uploadPath)){mkdir($uploadPath,0777,true);chmod($uploadPath,0777);}$destination = $uploadPath.'/'.$unique;//从暂存目录上传到指定目录,@屏蔽错误信息if(!@move_uploaded_file($pic_info['tmp_name'],$destination)){exit('文件上传失败<br/>');}echo '文件上传成功<br/>';return $destination;}else{echo "请选择上传图片!<br/>";}}?></span>
三、通过PHP代码实现多个文件的上传功能
<span style="font-size:14px;"><?php//print_r($_FILES);header('Content-type:text/html;charset=utf-8');include_once 'multiUpload.php';$files = getFiles();print_r($files);foreach($files as $fileInfo){$file[] = uploadFile($fileInfo);}//array_values()返回数组中所有的值并给其建立数字索引。//array_filter()对数组进行过滤,去掉空值$uploadFile = array_values(array_filter($file));print_r($uploadFile);?></span>
可以在页面上得到如下信息,可以看到上传成功文件的名称:
Array(
[0] => Array(
[name] => IMG_20130930_120224.jpg
[type] => image/jpeg
[tmp_name] => D:\xampp\tmp\php4DEE.tmp
[error] => 0
[size] => 365134)
[1] => Array(
[name] => IMG_20130930_120314.jpg
[type] => image/jpeg
[tmp_name] => D:\xampp\tmp\php4DFE.tmp
[error] => 0
[size] => 383420)
[2] => Array(
[name] => IMG_20130930_120436.jpg
[type] => image/jpeg
[tmp_name] => D:\xampp\tmp\php4E3E.tmp
[error] => 0
[size] => 436443)
[3] => Array(
[name] => IMG_20130930_124607.jpg
[type] => image/jpeg
[tmp_name] => D:\xampp\tmp\php4E3F.tmp
[error] => 0
[size] => 468199)
)
文件上传成功
文件上传成功
文件上传成功
文件上传成功
Array(
[0] => upload/4217e6f9a0251b2d8a59dec66cbe9810.jpg
[1] => upload/027b42fbff0117620e670b5710f8d45b.jpg
[2] => upload/d88ef934b7b6ebbc68c2e3afb79f05c2.jpg
[3] => upload/4048607fa33c73adb3473b21caa27aca.jpg)
- PHP实现多文件上传
- php实现多文件上传
- PHP实现多文件上传
- PHP-实现多文件上传
- [PHP实例] PHP多文件上传实现
- PHP实现文件上传
- 实现php文件上传
- PHP上传文件实现
- php实现文件上传
- [php] 实现文件上传
- PHP实现文件上传
- php实现文件上传
- PHP实现文件上传
- PHP-实现文件上传
- PHP 实现文件上传
- php实现文件上传
- 使用PHP实现文件上传和多文件上传
- 使用PHP实现文件上传和多文件上传
- Docker DockerFile指令
- 华为OJ 初级:密码强度等级
- 嵌入式开发第16天(开发板触摸驱动,mmap)
- git 与 svn 的主要区别!
- 大数据Spark “蘑菇云”行动前传第10课:Scala继承彻底实战和Spark源码鉴赏.
- PHP实现多文件上传
- Oracle的存储架构
- C语言中的数据类型
- bootstrap-table使用总结
- 爬虫系统简介
- 求最小公倍数
- Java 正则表达式的详解
- SlidingMenu继承SlidingMenuActivity时
- 安全相关工具类