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&amp;java(三)
Oct 09 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
使用PHP开发留言板功能
Nov 19 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 sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
lib.utf.js
2007/08/21 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python中IPYTHON入门实例
2015/05/11 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
ORACLE十问
2015/04/20 面试题
南京软件公司的.net程序员笔试题
2014/08/31 面试题
建筑工程实习自我鉴定
2013/09/19 职场文书
数控专业大学生的自我鉴定
2013/11/13 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
师德演讲稿范文
2014/05/06 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
SQL SERVER触发器详解
2022/02/24 SQL Server