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中的正规表达式(二)
Oct 09 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
php 获取本地IP代码
Jun 23 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
php实现源代码加密的方法
Jul 11 PHP
PHP加密解密类实例代码
Jul 20 PHP
php版微信发红包接口用法示例
Sep 23 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
php写入txt乱码的解决方法
Sep 17 PHP
php实现登录页面的简单实例
Sep 29 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
python发送邮件实例分享
2017/07/28 Python
神经网络python源码分享
2017/12/15 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python实现最常见加密方式详解
2019/07/13 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python sep参数使用方法详解
2020/02/12 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
个人党性分析总结
2015/03/05 职场文书
全陪导游词开场白
2015/05/29 职场文书
返乡农民工证明
2015/06/24 职场文书
个人道歉信大全
2019/04/11 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技