php多个文件及图片上传实例详解


Posted in PHP onNovember 10, 2014

本文实例讲述了php多个文件及图片上传的方法。分享给大家供大家参考。具体实现方法如下:

多个文件上传是在单文件上传的基础上利用遍历数组的方式进行遍历表单数组然后把文件一个个上传到服务器上了,下面就来看一个简单多个文件上传实例

多个文件上传和单独文件上传的处理方式是一样的,只需要在客户端多提供几个类型为“file”的输入表单,并指定不同的“name”属性值。例如,在下面的代码中,可以让用户同时选择三个本地文件一起上传给服务器,客户端的表单如下所示:

<html>

<head><title>多个文件上传表单</title></head>

<body>

<form action="mul_upload.php" method="post" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="1000000">

选择文件1:<input type="file" name='myfile[]'><br>

选择文件2:<input type="file" name='myfile[]'><br>

选择文件3:<input type="file" name='myfile[]'><br>

<input type="submit" value="上传文件">

</form>

</body>

</html>

在上面的代码中,将三个文件类型的表单以数组的形式组织在一起。当上面的表单教给PHP的脚本文件mul_upload.php时,在服务器端同样使用全局数组$_FILES存储所有上述文件的信息,但$_FILES由二维数组已经转变为三维数组,这样就可以存储多个上传文件的信息。在脚本文件mul_upload.php中,使用print_r()函数将$_FILES数组中的内容输出,代码如下所示:
<?php

//打印三维数组$_FILES中的内容,查看一下存储上传文件的结构

print_r($_FILES);

?>

当选择三个本地文件提交后,输出结果如下所示
Array(

    [myfile]=>Array(

        [name]=>Array(              //$_FILES["myfile"]["name"]存储所有上传文件的内容

            [0]=>Rav.ini         //$_FILES["myfile"]["name"][0]第一个上传文件的名称

            [1]=>msgsocm.log     //$_FILES["myfile"]["name"][1]第二个上传文件的名称

            [2]=>NOTEPAD.EXE)        //$_FILES["myfile"]["name"][2]第三个上传文件的名称

        [type]=>Array(               //$_FILES["myfile"]["type"]存储所有上传文件的类型

            [0]=>application/octet-stream          //$_FILES["myfile"]["type"][0]第一个上传文件的类型

            [1]=>application/octet-stream          //$_FILES["myfile"]["type"][1]第二个上传文件的类型

            [2]=>application/octet-stream)         //$_FILES["myfile"]["type"][2]第三个上传文件的类型

        [tmp_name]=>Array(

            [0]=>C:/WINDOWS/Temp/phpAF.tmp

            [1]=>C:/WINDOWS/Temp/phpB0.tmp

            [2]=>C:/WINDOWS/Temp/phpB1.tmp)

        [error]=>Array(

            [0]=>0

            [1]=>0

            [2]=>0)

        [size]=>Array(

            [0]=>64

            [1]=>1350

            [2]=>66560))

)

通过输出$_FILES数组的值可以看到,处理多个文件的上传和单个文件上传时的情况一样的,只是$_FILES数组的结构形式略有不同。通过这种方式可以支持更多数量的文件上传。
例子如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 

<title>文档上传</title> 

</head> 

<body> 

<script language="javascript"><!-- 

动态添加文件选择控件--> 

function AddRow() 

{ 

var eNewRow = tblData.insertRow(); 

for (var i=0;i<1;i++) 

{ 

var eNewCell = eNewRow.insertCell(); 

eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>"; 

} 

} 

// --></script> 

<form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" > 

<table id="tblData" width="400" border="0"> 

<!-- 将上传文件必须用post的方法和enctype="multipart/form-data" --> 

<!-- 将本页的网址传给uploadfile.php--> 

<input name="postadd" type="hidden" value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" /> 

<tr><td>文件上传列表 

<input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr> 

<!-- filelist[]必须是一个数组--> 

<tr><td><input type="file" name="filelist[]" size="50" /></td></tr> 

</table> 

<input type="submit" name="submitfile" value="提交文件" /> 

</form> 

</body> 

</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 

<title>文档上传</title> 

</head> 

<body> 

<script language="javascript"><!-- 

动态添加文件选择控件--> 

function AddRow() 

{ 

var eNewRow = tblData.insertRow(); 

for (var i=0;i<1;i++) 

{ 

var eNewCell = eNewRow.insertCell(); 

eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>"; 

} 

}

// --></script> 

<form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" > 

<table id="tblData" width="400" border="0"> 

<!-- 将上传文件必须用post的方法和enctype="multipart/form-data" --> 

<!-- 将本页的网址传给uploadfile.php--> 

<input name="postadd" type="hidden" value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" /> 

<tr><td>文件上传列表 

<input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr> 

<!-- filelist[]必须是一个数组--> 

<tr><td><input type="file" name="filelist[]" size="50" /></td></tr> 

</table> 

<input type="submit" name="submitfile" value="提交文件" /> 

</form> 

</body> 

</html>

提交文件代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 

<title>文件上传结果</title> 

</head> 

<body> 

<?php 

if ($_POST["submitfile"]!="") 

{ 

$Path="./".date('Ym')."/"; 

if (!is_dir($Path))//创建路径 

{ mkdir($Path); } 

echo "<div>"; 

for ($i=0;$i<count($filelist);$i++) 

{ //$_FILES["filelist"]["size"][$i]的排列顺序不可以变,因为fileist是一个二维数组 

if ($_FILES["filelist"]["size"][$i]!=0) 

{ 

$File=$Path.date('Ymdhm')."_".$_FILES["filelist"]["name"][$i]; 

if (move_uploaded_file($_FILES["filelist"]["tmp_name"][$i],$File)) 

{ echo "文件上传成功 文件类型:".$_FILES["filelist"]["type"][$i]." "."文件名:" 

.$_FILES["filelist"]["name"][$i]."<br>"; } 

else 

{ echo "文件名:".$_FILES["filelist"]["name"][$i]."上传失败</br>"; } 

} 

} 

echo "</div><br><a href="$postadd" href="$postadd">返回</a></div>"; 

} 

?> 

</body> 

</html>

上面例子基于 js来动态增加上传文件框了,从而达到多文件上传的功能。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP中使用CURL伪造来路抓取页面或文件
May 04 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
四个PHP非常实用的功能
Sep 29 PHP
必须收藏的php实用代码片段
Feb 02 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 #PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 #PHP
php json转换成数组形式代码分享
Nov 10 #PHP
PHP冒泡算法详解(递归实现)
Nov 10 #PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 #PHP
PHP 快速排序算法详解
Nov 10 #PHP
PHP基于CURL进行POST数据上传实例
Nov 10 #PHP
You might like
PHP生成便于打印的网页
2006/10/09 PHP
PHP-MySQL教程归纳总结
2008/06/07 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
vue.js的提示组件
2017/03/02 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python内置函数OCT详解
2016/11/09 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Django发送邮件功能实例详解
2019/09/02 Python
简单了解python列表和元组的区别
2020/05/14 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
三月学雷锋活动总结
2014/06/26 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
比较几种Redis集群方案
2021/06/21 Redis
javascript Number 与 Math对象的介绍
2021/11/17 Javascript