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 相关文章推荐
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
PHP 采集心得技巧
May 15 PHP
PHP include_path设置技巧分享
Jul 03 PHP
PHP 解决session死锁的方法
Jun 20 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
深入理解PHP内核(一)
Nov 10 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 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函数解决SQL injection
2006/10/09 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
Python的语言类型(详解)
2017/06/24 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Django时区详解
2019/07/24 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
小学毕业感言300字
2014/02/19 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android