1,判断文件是否为空 empty($_FILES[表单名][name])
2,判断文件上传是否成功 $_FILES[表单名][error]
3,判断文件上传类型$_FILES[表单名][type]
4,判断文件是不是上传文件,is_uploaded_file
5,移动上传的文件,move_uploaded_file
6,如果写成方法,需要返回文件路径
多文件上传
1,过滤空值array_filter()
2,循环上传
/**
* 文件上传处理函数
* @param array $upfile 上传文件信息数组,如:$_FILES['pic'];
* @param string $path 上传文件的存储目录路径
* @param array $typelist 允许上传的文件类型,默认为array()则表示不限制类型
* 如:array("image/jpeg","image/gif","image/png"); //定义允许的上传文件类型
* @param int $maxsize 允许上传文件的大小,默认为0表示不限制。
* @return array 返回值为两个单元的数组,
* 第一个单元下标为error:true表示成功,false表示失败
* 第二个单元下标为info:上传成功表示文件名,上传失败表示失败原因
*/
function uploadFile($upfile,$path,$typelist=array(),$maxsize=0){
//1.定义一些变量:
$path=$path.'/'.date('Ymd').'/';
if(!is_dir($path)){
mkdir($path,0777,true);
}
$path=rtrim($path,"/")."/"; //处理一下上传目录
$res=array("error"=>false,"info"=>""); //定义返回值
//2.判断上传文件错误
if($upfile['error']>0){
switch($upfile['error']){
case 1: $info="上传文件大小超过了php.ini中配置"; break;
case 2: $info="上传文件大小超过form表单中MAX_FILE_SIZE的设置"; break;
case 3: $info="文件只有部分被上传"; break;
case 4: $info="没有文件被上传"; break;
case 6: $info="找不到临时文件夹"; break;
case 7: $info="文件写入失败"; break;
default: $info="未知错误!"; break;
}
$res['info']=$info;
return $res;
}
//3.判断上传文件类型
if(count($typelist)>0 && !in_array($upfile['type'],$typelist)){
$res['info']="上传文件类型错误!当前文件类型:".$upfile['type'];
return $res;
}
//4.判断上传文件大小
if($maxsize>0 && $upfile['size']>$maxsize){
$res['info']="上传文件大小超出{$maxsize}";
return $res;
}
//5.上传文件的名称处理(防止名字重复)
$ext = pathinfo($upfile['name'],PATHINFO_EXTENSION);//获取文件的后缀名
do{
$newfile = time().rand(1000,9999).".".$ext; //随机一个文件名
}while(file_exists($path.$newfile)); //判断是否存在
//6.执行文件上传。
//判断临时目录的的文件是否是有效的上传文件
if(is_uploaded_file($upfile['tmp_name'])){
// 这个就类似于copy函数
if(move_uploaded_file($upfile['tmp_name'],$path.$newfile)){
$res['error']=true;
$res['info']=$newfile;
}else{
$res['info']="移动上传文件错误!";
}
}else{
$res['info']="不是有效的上传文件!";
}
return $res;
}
文件上传方法
$arr=uploadFile($_FILES['file'],'./upload');
var_dump($arr);
上传方法调用
调用成功后,会在upload文件夹下创建以年月日为目录名的文件夹,并将文件进行上传