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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
php 常用类汇总 推荐收藏
May 13 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
检查php文件中是否含有bom的函数
May 31 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 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操作MongoDB的技术总结
2013/06/02 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
详解webpack-dev-server的简单使用
2018/04/02 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python基础梳理(一)(推荐)
2019/04/06 Python
pytorch实现查看当前学习率
2020/06/24 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
自荐信写法介绍
2014/01/25 职场文书
婚礼主持词
2014/03/13 职场文书
公司业务员岗位职责
2014/03/18 职场文书
求职信模板
2014/05/23 职场文书
学校标语口号大全
2015/12/26 职场文书
高一化学教学反思
2016/02/22 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js