文件上传类功能包含:
1.允许文件类型,文件大小,文件保存路劲的设置
2.根据年月日生成保存文件的具体目录和重命名上传文件
3.文件上传时异常处理
4.如果上传成功,则返回文件保存路径,新文件名等相关信息的数组
class FileupTool{
protected $allowExt = 'jpg,jpeg,gif,bmp,png';
protected $maxSize = 1;//1m
protected $filePath = 'static/uploads/images/';
protected $file = null; //存储上传文件信息
protected $errno = 0;//错误代码
protected $error = array(
0=>'文件上传无异常!',
1=>'上传文件超过了配置文件php.ini中upload_max_filesize选项限制值!',
2=> '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定值!',
3=>'文件只有部分被上传!',
4=>'没有文件被上传!',
6=> '找不到临时文件夹!',
7=>'文件写入失败!',
8=>'不允许的后缀名文件',
9=>'文件大小超出自定义大小的允许范围',
10=>'文件目录不存在!',
100=>'file upload failed!',
200=>'file upload success!'
);
/**
* 外部定义相关属性
*/
public function setType($type){
$this->allowExt = $type;
}
public function setSize($size){
$this->maxSize = $size;
}
public function setPath($path){
$this->filePath = $path;
}
//文件上传
public function up($key){
if(!isset($_FILES[$key])){
return false;
}
$f = $_FILES[$key];
//文件上传异常处理
if($f['error'] !=0){
$this->errno = $f['error'];
return false;
}
//获取后缀
$ext = $this->getExt($f['name']);
//检查后缀
if(!$this->isAllow($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();
//重命名后的文件
$newfile = $newname.'.'.$ext;
//新文件的文件存储路径
$path = $dir.'/'.$newfile;
//存储到数据库时需要去掉ROOT路径
$imgpath = str_replace(ROOT,'',$path);
//移动文件到存储目录
if(move_uploaded_file($f['tmp_name'],$path)){
$res= array(
'code'=>200,
'path'=>$imgpath,
'name'=>$newfile,
'msg'=>'file upload success!'
);
return $res;
}else{
$res= array(
'code'=>100,
'msg'=>'file upload failed!'
);
return $res;
}
}
//获取上传文件的后缀名
protected function getExt($str){
$tmp = explode('.',$str);
return end($tmp);
}
//判断上传文件是否是允许的类型
protected function isAllow($ext){
return in_array(strtolower($ext),explode(',',strtolower($this->allowExt)));
}
//判断你上传文件大小是否是允许范围内
protected function isAllowSize($size){
return $size <= $this->maxSize*1024*1024;
}
//随机定义文件名
protected function randName(){
$str = 'abcdefghijklmnopqrstuvwxyz0123456789';
return substr(str_shuffle($str),0,6).date('Ymd');
}
//创建存储上传文件的文件夹
protected function mk_dir(){
$dir = ROOT.$this->filePath.date('Y/md');
if(is_dir($dir) || mkdir($dir,0777,true)){ //短路运算法
return $dir;
}else{
return false;
}
}
//异常信息输出
public function getError(){
return $this->error[$this->errno];
}
}
调用示例:
//引入文件上传处理类
$fileup = new FileupTool();
//设置图片上传的保存位置
$fileup->setPath('static/uploads/images/');
//获取文件上传时附带的数据,表单name即文件名字
$filename = $_POST['filename']; //ori_img
//调用文件上传函数
$res = $fileup->up($filename);
echo json_encode($res);