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 相关文章推荐
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
PHP中数组的分组排序实例
Jun 01 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 PHP
laravel框架中间件简单使用方法示例
Jan 25 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
python3个性签名设计实现代码
2018/06/19 Python
更新修改后的Python模块方法
2019/03/03 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
想学画画?python满足你!
2020/12/24 Python
优秀的毕业生的自我评价
2013/12/12 职场文书
黄金酒广告词
2014/03/21 职场文书
工作说明书格式
2014/07/29 职场文书
端午节活动总结
2014/08/26 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
公务员检讨书
2014/11/01 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
委托公证书格式
2015/01/26 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
工程质量保证书
2015/05/09 职场文书
费用申请报告范文
2015/05/15 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
Java版 简易五子棋小游戏
2022/05/04 Java/Android