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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
用PHP实现图象锐化代码
Jun 14 PHP
php去除重复字的实现代码
Sep 16 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
小议Javascript中的this指针
2010/03/18 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
React学习笔记之条件渲染(一)
2017/07/02 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
Django数据库表反向生成实例解析
2018/02/06 Python
Python绘制3D图形
2018/05/03 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
建筑工地宣传标语
2014/06/18 职场文书
出售房屋协议书范本
2014/10/06 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
运动会加油稿20字
2014/11/15 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server