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 相关文章推荐
将数组写入txt文件 var_export
Apr 21 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
php注册审核重点解析(数据访问)
May 23 PHP
php实现查询功能(数据访问)
May 23 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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
function.inc.php超越php
2006/12/09 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
Python实现Linux下守护进程的编写方法
2014/08/22 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
商场总经理岗位职责
2014/02/03 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
向领导表决心的话
2014/03/11 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
律师函格式范本
2015/05/27 职场文书
孔繁森观后感
2015/06/10 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
Go语言编译原理之源码调试
2022/08/05 Golang
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript