总结: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没有上传文件