PHP实现多文件上传笔记

总结:PHP文件上传的大概过程:通过表单中的文件语提交上传文件,通过$_FILES数组处理文件,通过is_uploaded_file()函数验证上传文件,通过move_uploaded_file()函数完成文件上传.

说明几点:

1:form表单的 enctype 属性:

form表单的encrypt属性的默认值为application/x-www-form-urlencoded,它只能用于提交一般的表单请求。如果提交的表单中包含需要上传的文件,我们需要将enctype的属性值改为multipart/form-data才能实现文件上传功能。

2:$_FILES[]全局数组为一个多维数组,用于获取通过POST方法上传文件时的相关信息.如果是单文件上传,那么数组为二维数组,如果是多文件上传,那么数组为三维数组.它包含所有上传文件的信息.

3:通过is_uploaded_file()函数对上传文件进行判断,可以确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如/etc/passwd.


实例:

先编写一个简单的upload.php文件

<html>
<head>
<title>
多文档上传界面
</title>
</head>
<body>
<form method="post" name="form1" enctype="multipart/form-data" action="ckupload.php">
<filedset>
<legend>请选择上传的文档</legend><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" name ="sub" value="文件上传">
</filedset> 
</form>
</body>
</html>


运行结果如图:

在编写一个后台运行的PHP文件ckupload.php

<?php


//指定存储的新目录
$new_folder="Doc";

if(isset($_POST['sub']))      //判断是否执行操作
{
//创建一个目录
if(!is_dir("$new_folder"))   //创建指定的文件夹是否存在
{
mkdir("$new_folder");     //创建文件夹
}

$file=$_FILES['userfile'];   //获取表单提交的文件名称

//如果是多文件上传,那么数组为三维数组
//用for循环来获取传递的数据.

 for($i=0;$i<count($file['tmp_name']);$i++)
{
//判断文件是否上传到服务器
if($file['error'][$i]>0)
{
echo "请注意:";
switch($file['error'][$i]){
case 1:
echo "文档".($i+1)."上传文件大小超出配置文件规定值";
break;
case 2:
echo "文档".($i+1)."上传文件大小超出表单中约定值";
break;
case 3:
echo "文档".($i+1)."上传文件不全";
break;
case 4:
echo "文档".($i+1)."没有上传文件<br>";
break;
}

}

//对提交进行验证
if(is_uploaded_file($file['tmp_name'][$i]))
{
//获取上传文档的名称
$filename=$file['name'][$i];
//获取上传文件的类型
$filetype=$file['type'][$i];
//获取上传文件的大小
$file_size =$file['size'][$i]; 

//文件上传后保存的路径和新的名称
$filepath=$new_folder."/".$file['name'][$i];


if(move_uploaded_file($file['tmp_name'][$i],$filepath))
{
echo "文档".$filename."上传成功!<br>";
echo "文档类型是:$filetype<br>";
echo "文档大小为:$file_size<br>";
}
else
{
  echo "文档".$filename."上传失败!<br>";
}
  }
}


}
else
{
echo "Error!";
}

?>


运行结果:


结果:

文档MySQL.docx上传成功!
文档类型是:application/vnd.openxmlformats-officedocument.wordprocessingml.document
文档大小为:13921
文档makefile.docx上传成功!
文档类型是:application/vnd.openxmlformats-officedocument.wordprocessingml.document
文档大小为:17958
请注意:文档3没有上传文件
请注意:文档4没有上传文件
请注意:文档5没有上传文件


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值