1,封装
<?php class upload{ protected $fileName; protected $maxSize; protected $allowMime; protected $imgFlag; protected $allowExt; protected $uploadPath; protected $fileInfo; protected $error; protected $ext; public function __construct($fileName='myFile',$imgFlag=true,$uploadPath='./uploads',$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif','wbmp'),$allowMime=array('image/jpeg','image/jpg','image/png','image/gif','image/wbmp')){ $this->filename=$filename; $this->maxSize=$maxSize; $this->allowMime=$allowMime; $this->allowExt=$allowExt; $this->uploadPath=$uploadPath; $this->imgFlag=$imgFlag; $this->fileInfo=$_FILES[$this->fileName]; } /* *检测是否有错 */ protected function checkError() { if(is_null($this->fileInfo)){ if($this->fileInfo['error']>0){ switch ($this->fileInfo['error']) { case 1: $this->error='超过了PHP配置文件中upload_max_files'; break; case 2: $this->error='超过了表单MAX_FTLE_SIZE设置的值'; break; case 3: $this->error='文件部分上传'; break; case 4: $this->error='没有选择上传文件'; break; case 6: $this->error='没有找到临时目录'; break; case 7: $this->error='文件不可写'; break; case 8: $this->error='由于PHP的扩展程序中断文件上传'; break; } return false; }else{ return true; } }else{ $this->error='文件上传出错'; return false; } } /* @检测文件的大小 */ protected function checkSize() { if($this->fileInfo['size']>$this->maxSize){ $this->error='上传的文件过大'; return false; } return true; } /* @检测文件的扩展名 */ protected function checkExt() { $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION)); if(!in_array($this->ext, $this->allowExt)){ $this->error='不允许的扩展名'; return false; } return true; } /* @检测文件类型 */ protected function checkMime() { if(!in_array($this->fileInfo['type'], $this->allowMime)){ $this->error='不允许的文件类型'; return false; } return true; } /* @检测文件是否真的是图片 */ protected function checkTrueImg() { if($this->imgFlag){ if(!@getimagesize($this->fileInfo['tmp_name'])){ $this->error='不是真的图片'; return false; } return true; } } /* @检测文件是否是http post传递 */ protected function HTTPPost() { if(!is_uploaded_file($this->fileInfo['tmp_name'])){ $this->error='是http post传递'; return false; } return true; } } /* @显示错误 */ protected function showError() { exit('<span style ="color:red">'.$this->error.'</span>'); } /* @判断路径是否存在,不存在创建 */ protected function checkUploadPath() { if(!file_exists($this->uploadPath)){ mkdir($this->uploadPath,0777,ture); } } /* *得到唯一文件名 */ function getUniName(){ return md5(uniqid(microtime(true),true)); } /* *上传文件 */ public function uploadFile() { if($this->checkError()&&$this->checkSize() &&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()&&$this->checkExt()){ //判断路径是否存在 $this->checkUploadPath(); $this->uniName=$this->getUniName(); $this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext; if(move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){ return $this->destination; }else{ $this->error='文件移动失败'; $this->showError(); } }else{ $this->showError(); } } }2,视图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="morefile.php" method="post" enctype="multipart/form-data"> <!-- multiple选择多个文件上传 --> <input type="file" name="myFile[]" multiple="multiple"/><br> <input type="submit" value="上传文件" /><br> </form> </body> </html>3,使用:
<?php header('content-type:text/html;charset=utf-8'); require_once 'class.php'; $upload=new upload(); // $d=$upload->uploadFile(); $d=$upload->uploadFile('myfile','fff'); echo $d;