php图片文件上传类upload v2.3,实现单张图片和多张图片批量上传,喜欢的朋友可以按自己的需要来做些调整,比如这个php文件上传类将图片校验和上传分开写了,如果要简化的话可以给两个方法都写到一起去,也可以加个构造函数给必要参数一次性传进去,这是纯php上传文件类。
//图片上传类 v2.3 class MyFileUpload{ //单个图片信息校验 public function CheckImageFile($file,$name){ $rearr= array('a','');//a:no b:ok //图片文件类型 $imageTypes = array('jpeg','gif','pjpeg','png'); //图片大小限制 $imageSize = 1024000;//图片大小限制1M //校验数组 if(!$file[$name] || $file[$name]["error"] > 0){ $rearr[1]='图片上传失败'; return $rearr; } //校验文件类型 if($file[$name]['type']==''){ $rearr[1]='文件类型不允许'; return $rearr; } $index = strripos($file[$name]['type'],'/')+1; $type = substr($file[$name]['type'],$index); if(!in_array($type,$imageTypes)){ $rearr[1]='文件类型不允许'; return $rearr; } //校验文件尺寸 if($file[$name]['size']+3>$imageSize+3){ $rearr[1]='图片尺寸过大,上传失败'; return $rearr; } $rearr[0]='b'; $rearr[1]='OK'; return $rearr; } //执行图片上传($_FiLES,表单中的name属性,保存路径-相对首页路径) public function UploadImage($file,$name,$savedir='uploads'){ $return_arr = array('a',''); $type = $file[$name]["name"]; $index = strripos($type,'.'); $type = substr($type,$index); $newname = date('YmdH',time()).rand(10000,99999).'_'.rand(10000,99999).$type; $savedir = $savedir.'/image/'.date('Ym',time()); if(!is_dir($savedir)){ //if(mkdir(iconv("UTF-8", "GBK", $savedir),0777,true)){ if(mkdir($savedir,0777,true)){ //创建目录成功 }else{ //创建目录失败 $return_arr[1]='创建目录失败'; return $return_arr; } } $filename = $savedir.'/'.$newname; if(move_uploaded_file($file[$name]["tmp_name"],$filename)){ $return_arr[0]='b'; $return_arr[1]=$savedir.'/'.$newname; }else{ //操作失败 $return_arr[1]='操作失败'; } return $return_arr; } //多个图片信息校验 ($_FiLES,图片在form中的name) public function MultiCheckImageFile($file,$name){ $rearr= array( 'flag'=>'0',//成功则为 1 'info'=>'图片上传失败' ); $imageTypes = array('jpeg','jpg','gif','png','bmp');//允许类型 $imageSize = 1024000;//图片大小限制1M //空校验 if(!$file[$name]){return $rearr;} $count = count($file[$name]['name']); for($i=0;$i<$count;$i++){ if($file[$name]['tmp_name'][$i]==''){ $rearr['info']='请选择图片'; return $rearr; } //校验文件类型 $index = strripos($file[$name]['type'][$i],'/')+1; $type = substr($file[$name]['type'][$i],$index); if(!in_array($type,$imageTypes)){ $rearr['info']='文件类型不允许['.$file[$name]['name'][$i].']'; return $rearr; } //校验文件尺寸 if($file[$name]['size'][$i]+3>$imageSize+3){ $rearr['info']='图片尺寸过大,上传失败['.$file[$name]['name'][$i].']'; return $rearr; } } $rearr['flag']='1'; $rearr['info']='校验成功'; return $rearr; } //多个执行图片上传($_FiLES,表单中的name属性) public function MultiUpload($file,$name,$savedir='uploads'){ $return_arr = $rearr= array( 'flag'=>'0',//成功则为 1 'data'=>array( //所有图片url集合 ), 'info'=>'图片上传失败' ); $count = count($file[$name]['name']); for($i=0;$i<$count;$i++){ $type = $file[$name]["name"][$i]; $index = strripos($type,'.'); $type = substr($type,$index); $newname = date('YmdH',time()).rand(10000,99999).'_'.rand(10000,99999).$type; $savedir = $savedir.'/image/'.date('Ym',time()); if(!is_dir($savedir)){ if(!mkdir(iconv("UTF-8", "GBK", $savedir),0777,true)){ //创建目录失败 $return_arr['info']='创建目录失败'; return $return_arr; } } //保存图片 if(move_uploaded_file($file[$name]["tmp_name"][$i],$savedir.'/'.$newname)){ $return_arr['data'][]=$savedir.'/'.$newname; }else{ $return_arr['info']='图片保存失败'; return $return_arr; } } $return_arr['flag']='1'; $return_arr['info']='上传成功'; return $return_arr; } }
$file,$savedir这些都可以再做些适当的优化,