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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
php类的定义与继承用法实例
Jul 07 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
初识ThinkPHP控制器
2016/04/07 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python魔术方法详解
2015/02/14 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python3使用requests发闪存的方法
2016/05/11 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
自我鉴定标准格式
2014/03/19 职场文书
秘书英文求职信
2014/04/16 职场文书
节能环保口号
2014/06/12 职场文书
最美护士演讲稿
2014/08/27 职场文书
2014年度工作总结报告
2014/12/15 职场文书
培训通知
2015/04/17 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript