<?php
defined('ACC') || exit('ACC Denied');
/*
上传文件
配置允许文件的后缀 配置允许文件大小
随机生成目录 随机生成文件名
获取文件后缀 判断文件的后缀
良好的报错支持
*/
class Files {
protected $allowext = 'jpg,png'; //允许的后缀
protected $allowsize = 1; //允许的size
protected $errno = 0;
protected $error = array( //错误码
0=>'无错',
1=>'上传文件超出系统限制',
2=>'上传文件大小超出网页表单页面限制',
3=>'文件只上传了部分',
4=>'文件没有被上传',
6=>'找不到临时文件',
7=>'文件写入失败',
8=>'不允许的文件后缀',
9=>'文件大小超出了类的范围',
10=>'创建目录失败',
11=>'移动失败' );
public function up($key){ //上传封装
if (!isset($_FILES[$key])) {
return false;
}
$f = $_FILES[$key];
if ($f['error']) {
$this->errno = $f['error'];
return false;
}
$ext = $this->getExt($f['name']);
if (!$this->isallowExt($ext)) {
$this->errno = 8;
return false;
}
if (!$this->isallowSize($f['size'])) {
$this->errno = 9;
return false;
}
$dir = $this->mk_dir();
if ($dir == false) {
$this->errno = 10;
return false;
}
$newname = $this->randName() . '.' . $ext;
if(!move_uploaded_file($f['tmp_name'], $dir. '/' . $newname)){ //移动文件并随机文件名
$this->errno = 11;
return false;
}
return str_replace(ROOT, '',$dir); //转路径 ROOT为空
}
protected function mk_dir(){
$dir = ROOT . 'data/files/' . date('Yd/m');
if (is_dir($dir) || mkdir($dir,0777,true)) {
return $dir;
} else {
return false;
}
}
protected function getExt($file){
$tmp = explode('.', $file);
return end($tmp);
}
protected function isallowExt($ext){
return in_array(strtolower($ext),explode(',', $this->allowext));
}
protected function isallowSize($size){
return $size <= $this->allowsize * 1024 * 1024;
}
protected function randName($length=6){
$str = 'qwertyuioplkjhgfdsazxcvbnm23456789';
return substr(str_shuffle($str),0,$length);
}
public function getErr(){
return $this->error[$this->errno];
}
public function getSet($exts){ //最后加的动态添加后缀方法
$this->allowext = $exts;
}
public function getSize($sizes){ //最后加的动态添加size方法
$this->allowsize = $sizes;
}
}