php上传(二)
上传的主体页面
<!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" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>Document</title> </head> <body> <form action="doAction.php" method='post' enctype='multipart/form-data'> 请选择头像: <input type="file" name="myFile" id="" /><br/> <input type="submit" value="上传" /> </form> </body> </html>
处理页面 doAction.php
<?php header('content-type:text/html;charset=utf-8'); //1.接受数据 $fileInfo=$_FILES['myFile']; $filename=$fileInfo['name']; $type=$fileInfo['type']; $tmp_name=$fileInfo['tmp_name']; $size=$fileInfo['size']; $error=$fileInfo['error']; //2.判断错误号 if($error>0){ //匹配错误信息 switch($error){ case 1: $msg='超过了PHP配置文件中upload_max_filesize的值'; break; case 2: $msg='超过了MAX_FILE_SIZE选项的值'; break; case 3: $msg='文件部分被上传'; break; case 4: $msg='没有选择上传文件'; break; case 6: case 7: case 8: $msg='系统错误'; break; } exit($msg); } //检测上传文件的大小 $maxSize=2097152;//2M 允许上传的最大大小 if($size>$maxSize){ exit('上传文件过大'); } //检测上传文件的类型 $ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION)); $allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名 if(!in_array($ext,$allowExt)){ exit('非法文件类型'); } //检测是否是真实图片 $flag=true;//默认检测是否是真实图片 if($flag){ if(!getimagesize($tmp_name)){ exit('文件不是真实图片'); } } //检测是否是通过HTTP POST方式上传上来的 if(!is_uploaded_file($tmp_name)){ exit('文件不是通过HTTP POST方式上传上来的'); } //开始移动文件 $uploadPath='uploads'; //检测目录是否存在,如果不存在则创建 if(!file_exists($uploadPath)){ //创建目录 mkdir($uploadPath,0777,true); } //防止文件重名,生成唯一的文件名 $uniName=md5(uniqid()).'.'.$ext; $destination=$uploadPath.'/'.$uniName; if(!@move_uploaded_file($tmp_name, $destination)){ exit('文件移动失败'); } echo "文件{$filename}上传成功";
另一种写法
<?php header('content-type:text/html;charset=utf-8'); //在服务器端做限制 $fileInfo=$_FILES['myFile']; $filename=$fileInfo['name']; $type=$fileInfo['type']; $tmp_name=$fileInfo['tmp_name']; $error=$fileInfo['error']; $size=$fileInfo['size'];//上传文件的大小 $maxSize=2097152;//字节,允许上传文件的最大值 $allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名 $reUpload="<p><a href='upload.php'>重新上传</a></p>"; //2.判断错误号 if($error==UPLOAD_ERR_OK){ //3.检测上传文件的大小是否符合规范 if($size<=$maxSize){ //4.检测上传文件的扩展名在允许的范围内 //取出上传文件的扩展名 $arr=explode('.',$filename); $ext=end($arr); $ext=strtolower($ext); //echo $ext; if(in_array($ext,$allowExt)){ //echo '上传成功<br/>'; //5.检测文件是否是通过HTTP POST方式上传上来 //is_uploaded_file($tmp_name):检测服务器端的临时文件 //是否是通过HTTP POST方式上传上来的 if(is_uploaded_file($tmp_name)){ //6.移动文件 if(@move_uploaded_file($tmp_name, "../uploads/".$filename)){ echo '文件上传成功,信息如下:<hr/>'; echo '文件名:'.$filename,'<br/>'; echo '文件大小:'.$size,'<br/>'; echo '文件类型:'.$type,'<br/>'; }else{ die('文件移动失败'.$reUpload); } }else{ die('文件不是通过HTTP POST方式上传上来的'.$reUpload); } }else{ die('非法文件类型'.$reUpload); } }else{ die('上传文件过大<br/>'.$reUpload); } }else{ //匹配错误信息 switch($error){ case 1: $msg='超过了PHP配置文件upload_max_filesize选项的值'; break; case 2: $msg='超过了表单的MAX_FILE_SIZE选项的值'; break; case 3: $msg='文件部分被上传'; break; case 4: $msg='没有选择上传文件'; break; case 6: case 7: case 8: $msg='系统错误'; break; } die($msg); }
上传类
<?php class Upload{ //把文件保存 function saveFile($toPath="./",$allowType=array('image/png','image/gif','image/jpeg','image/pjpeg'),$allowSize=2000000){ if(!empty($_FILES)){//有文件上传 $reArr=array(); foreach($_FILES['upload']['error'] as $k=>$v){ if($v===0){//文件上传没有出错 //获取类型进行判断 $type=$_FILES['upload']['type'][$k]; if(in_array($type,$allowType)){//类型是否合法 //判断size $size=$_FILES['upload']['size'][$k]; if($size<=$allowSize){ //转移 $oldName=$_FILES['upload']['name'][$k]; $newName=$this->newName($oldName); //保存 $re=move_uploaded_file($_FILES['upload']['tmp_name'][$k],$toPath."/".$newName); if($re){ $reArr[$k]=$newName; }else{ $reArr[$k]=false; } }else{ $reArr[$k]=false; } }else{ $reArr[$k]=false; } }else{ $reArr[$k]=false; } } return $reArr; }else{ return false; } } //产生新名称 private function newName($oldName){//a.jpg $name=md5(uniqid(microtime(),true)); $ext=pathinfo($oldName,PATHINFO_EXTENSION); return $name.".".$ext; } }