PHP文件上传之多文件上传的实现思路


Posted in PHP onJanuary 27, 2016

多文件上传的两种情况

①使用多个name值

<input type="file" name="file1">
<input type="file" name="file2">
<input type="file" name="file3">
<input type="file" name="file4">

a.点击提交之后接收到的数据格式

Array
(
[file1] => Array
(
[name] => 8.png
[type] => image/png
[tmp_name] => G:\wamp\tmp\php737.tmp
[error] => 0
[size] => 200
)
[file2] => Array
(
[name] => 28.png
[type] => image/png
[tmp_name] => G:\wamp\tmp\php738.tmp
[error] => 0
[size] => 6244
)
[file3] => Array
(
[name] => 54a296f8n6787b34c.png
[type] => image/png
[tmp_name] => G:\wamp\tmp\php739.tmp
[error] => 0
[size] => 3143
)
[file4] => Array
(
[name] => 54c0573dncb4db6f7.jpg
[type] => image/jpeg
[tmp_name] => G:\wamp\tmp\php788.tmp
[error] => 0
[size] => 5404
)
)

从这种格式可以看出来,每一个文件对应一个数组单元

所以使用foreach遍历数组,并对每个数组单元进行文件上传函数调用

b.点击提交后的操作

①接收上传的文件信息

$file = $_FILES;

②引入上传函数

include('./functions.php');

③设置文件保存路径

$path = './uploads/'; // 此目录需要手动创建

④调用文件上传函数

foreach($file as $v){
$info = uploadFile($v,$path);
⑤判断上传状态
if($info['isok']){
echo '上传成功'.$info['message'];
} else {
echo '上传失败'.$info['message'];
}
}

---------------------------------------------------------------

②使用单个name值

a.第一种写法

<input type='file' name="file[]">
<input type='file' name="file[]">
<input type='file' name="file[]">

b.第二种写法

<input type="file" name="file[]" multiple>

c.点击提交之后,接收到的数据格式

Array
(
[userpic] => Array
(
[name] => Array
(
[0] => 8.png
[1] => 9b2d7581fba543ec9bcf95e91018915a.gif
[2] => 12.jpg
)
[type] => Array
(
[0] => image/png
[1] => image/gif
[2] => image/jpeg
)
[tmp_name] => Array
(
[0] => G:\wamp\tmp\php85E5.tmp
[1] => G:\wamp\tmp\php85E6.tmp
[2] => G:\wamp\tmp\php8635.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[size] => Array
(
[0] => 200
[1] => 16503
[2] => 19443
)
)
)

从这种格式可以看出来,是将上传的文件信息分开保存到每个下标中。
所以要做的事情就是拼接出来一个完整的文件信息,一个一维数组

Array(
[name] => 54c0573dncb4db6f7.jpg
[type] => image/jpeg
[tmp_name] => G:\wamp\tmp\php788.tmp
[error] => 0
[size] => 5404
)

所以要进行的操作,是遍历$_FILES['file'] 然后从中取出每条上传文件的信息

d.点击提交后的操作

①接收上传的文件信息

$file = $_FILES['file'];

②引入上传函数

include('./functions.php');

③设置文件保存路径

$path = './uploads/'; // 此目录需要手动创建

④调用文件上传函数

foreach($file['name'] as $key=>$value){
$data['name'] = $file['name'][$key];
$data['type'] = $file['type'][$key];
$data['tmp_name'] = $file['tmp_name'][$key];
$data['error'] = $file['error'][$key];
$data['size'] = $file['size'][$key];
$info = uploadFile($data,$path);

⑤判断上传状态

if($info['isok']){
echo '上传成功'.$info['message'];
} else {
echo '上传失败'.$info['message'];
}
}

a.遍历$file['name'] 只是为了获取$key

b.每遍历一次,取出相对应下标的文件信息,赋值给一个新数组中对应的键

如第一次 $key = 0;

$data['name'] = $file['name'][0]; // 相当于取出了第一个文件的名字
$data['type'] = $file['type'][0]; // 相当于取出了第一个文件的类型

...

第一次遍历完成之后

$data = array(
[name] => 54c0573dncb4db6f7.jpg
[type] => image/jpeg
[tmp_name] => G:\wamp\tmp\php788.tmp
[error] => 0
[size] => 5404
);

这样就取出了第一个文件的所有信息

然后调用上传函数,进行文件上传处理

第二次遍历时$key=1,相当于获取第二个上传文件的信息

PHP 相关文章推荐
基于php-fpm的配置详解
Jun 03 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
Laravel实现autoload方法详解
May 07 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 #PHP
PHP面向对象程序设计实例分析
Jan 26 #PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 #PHP
php实现爬取和分析知乎用户数据
Jan 26 #PHP
简单谈谈php延迟静态绑定
Jan 26 #PHP
You might like
PHP新手上路(十三)
2006/10/09 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
浅析用prototype定义自己的方法
2013/11/14 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
详解Python中的条件判断语句
2015/05/14 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
康拓普公司Java笔面试
2016/09/23 面试题
数据库连接池的工作原理
2012/09/26 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
日语系毕业生推荐信
2013/11/11 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
校园达人秀策划书
2014/01/12 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
违反交通法规检讨书
2014/09/10 职场文书
天那边观后感
2015/06/09 职场文书
2019年工作总结范文
2019/05/21 职场文书