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学习教程之第1天
Jun 15 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php实现图片等比例缩放代码
Jul 23 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP MSSQL 分页实例
Apr 13 PHP
php使用文本统计访问量的方法
May 12 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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版微信公众平台红包API
2015/04/02 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python中tell()方法的使用详解
2015/05/24 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
ipython和python区别详解
2019/06/26 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
python算的上脚本语言吗
2020/06/22 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
个人求职信范文分享
2014/01/06 职场文书
美德少年事迹材料
2014/01/23 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
纠风工作实施方案
2014/03/15 职场文书
百日安全活动总结
2014/05/04 职场文书
双拥工作宣传标语
2014/06/26 职场文书
详解Python flask的前后端交互
2022/03/31 Python