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 相关文章推荐
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
Zend Framework常用校验器详解
Dec 09 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
php输出形式实例整理
May 05 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/07/12 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
PHP实现简易计算器功能
2020/08/28 PHP
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
BootStrap TreeView使用实例详解
2017/11/01 Javascript
nodeJS微信分享
2017/12/20 NodeJs
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
python装饰器深入学习
2018/04/06 Python
Django配置文件代码说明
2019/12/04 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python调用.NET库的方法步骤
2019/12/27 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
食品安全工作实施方案
2014/03/26 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
部队2014年终工作总结
2014/11/27 职场文书
教师个人教学总结
2015/02/11 职场文书
借条格式范本
2015/05/25 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
Django migrate报错的解决方案
2021/05/20 Python
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫