PHP常用工具类之单文件上传类

文件上传类功能包含:

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值