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 相关文章推荐
附件名前加网站名
Mar 23 PHP
PHP 图片文件上传实现代码
Dec 29 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
PHP数组函数知识汇总
May 12 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
PHP简单计算两个时间差的方法示例
Jun 20 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP array_shift()用法实例分析
Jan 07 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 SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
高效率JavaScript编写技巧整理
2013/08/23 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
在Python下尝试多线程编程
2015/04/28 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
Reformation官网:美国女装品牌
2018/09/14 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏