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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP实现多图片上传类实例
Jul 26 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
laravel请求参数校验方法
Oct 10 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 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
多文件上传的例子
2006/10/09 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
jquery层次选择器的介绍
2019/01/18 jQuery
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python内建数据结构详解
2016/02/03 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
python实现log日志的示例代码
2018/04/28 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
Python list与NumPy array 区分详解
2019/11/06 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
通用C#笔试题附答案
2016/11/26 面试题
业务副厂长岗位职责
2014/01/03 职场文书
物业保安岗位职责
2014/07/02 职场文书
关于做家务的心得体会
2016/01/23 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python