1 class UpTool { 2 protected $allowExt = 'jpg,jpeg,gif,bmp,png'; 3 protected $maxSize = 1; //1M,M为单位 4 protected $errno = 0; // 错误代码 5 protected $error = array( 6 0=>'无错', 7 1=>'上传文件超出系统限制', 8 2=>'上传文件大小超出网页表单页面', 9 3=>'文件只有部分被上传', 10 4=>'没有文件被上传', 11 6=>'找不到临时文件夹', 12 7=>'文件写入失败', 13 8=>'不允许的文件后缀', 14 9=>'文件大小超出的类的允许范围', 15 10=>'创建目录失败', 16 11=>'移动失败' 17 18 ); 19 20 public function up($key) { 21 if(!isset($_FILES[$key])) { 22 return false; 23 } 24 $f = $_FILES[$key]; 25 // 检验上传有没有成功 26 if($f['error']) { 27 $this->errno = $f['error']; 28 return false; 29 } 30 // 获取后缀 31 $ext = $this->getExt($f['name']); 32 33 // 检查后缀 34 if(!$this->isAllowExt($ext)) { 35 $this->errno = 8; 36 return false; 37 } 38 // 检查大小 39 if(!$this->isAllowSize($f['size'])) { 40 $this->errno = 9; 41 return false; 42 } 43 // 通过 44 //创建目录 45 $dir = $this->mk_dir(); 46 if($dir == false) { 47 $this->error = 10; 48 return false; 49 } 50 51 // 生成随机文件名 52 $newname = $this->randName() . '.' . $ext; 53 $dir = $dir . '/' . $newname; 54 // 移动 55 if(!move_uploaded_file($f['tmp_name'],$dir)) { 56 $this->errno = 11; 57 return false; 58 } 59 return str_replace(ROOT,'',$dir); 60 61 } 62 63 64 public function getErr() { 65 return $this->error[$this->errno]; 66 } 67 /* 68 parm string $exts 允许的后缀 69 */ 70 public function setExt($exts) { 71 $this->allowExt = $exts; 72 } 73 public function setSize($num) { 74 $this->maxSize = $num; 75 } 76 /* 77 parm String $file 78 return String $ext 后缀 79 */ 80 protected function getExt($file) { 81 $tmp = explode('.',$file); 82 return end($tmp); 83 } 84 /* 85 parm String $ext 文件后缀 86 return bool 87 防止大小写的问题 JPG 88 */ 89 protected function isAllowExt($ext) { 90 return in_array(strtolower($ext),explode(',',strtolower($this->allowExt))); 91 } 92 // 检查文件的大小 93 protected function isAllowSize($size) { 94 return $size <= $this->maxSize * 1024 * 1024; 95 } 96 /* 97 按日期创建目录的方法 98 */ 99 protected function mk_dir() { 100 $dir = ROOT . 'data/images/' . date('Ym/d'); 101 if(is_dir($dir) || mkdir($dir,0777,true)) { 102 return $dir; 103 } else { 104 return false; 105 } 106 } 107 /* 108 生成随机文件名 109 */ 110 protected function randName($length = 6) { 111 $str = 'abcdefghijkmnpqrstuvwxyz23456789'; 112 return substr(str_shuffle($str),0,$length); 113 } 114 }