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 相关文章推荐
Win下如何安装PHP的APC拓展
Aug 07 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php跨服务器访问方法小结
May 12 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
php微信开发之关键词回复功能
Jun 13 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
Python切片用法实例教程
2014/09/08 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python 求定积分和不定积分示例
2019/11/20 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
如何写求职信
2014/05/24 职场文书
公司任命书范本
2014/06/04 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
承诺函范文
2015/01/21 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
企业宣传稿范文
2015/07/23 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技