php 制作文件上传类

来源:互联网 发布:吉林市退休工资算法 编辑:程序博客网 时间:2024/06/18 07:34
上传文件需要注意的地方:
        1:配置允许的后缀
        2:配置允许的大小
        3:随机生成目录
        4:随机生成文件:

        5:良好的报错的支持


下面以单文件上传类为例,看代码:

class UpTool {    protected $allowExt = 'jpg,jpeg,bmp,png';    protected $maxSize = 1; // 1M,M为单位    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 true;    }    // 获取错误    public function getErr() {        return $this->error[$this->errno];    }    /*        parm string $file        return string $ext 后缀    */    protected function getExt($file) {        $tmp = explode('.',$file);        return end($tmp);    }    /*        parm string $ext 文件后缀        return bool        防止大小写的问题 如JPG----strtolower()函数    */    protected function isAllowExt($ext) {        return in_array(strtolower($ext),explode(',',$this->allowExt));    }    // 检查文件大小    protected function isAllowSize($size) {        return $size <= $this->maxSize * 1024*1024;    }    /*        按日期创建目录的方法    */    protected function mk_dir() {        $dir = ROOT . 'data/images' . '/' . date('Ym/d');        // 判断目录是否存在        if(is_dir($dir) || mkdir($dir,0777,true)) {            return $dir;        } else {            return false;        }    }    /*        生成随机文件名    */    protected function randName($length=6) {        $str = 'abcdefghijklmnpqrstuvwyz234556789';        // 随机打乱,并截取        return substr(str_shuffle($str),0,$length);    }}

多文件上其实就是把得到的$_FILES进行foreach循环一下,举一反一吧!

0 0
原创粉丝点击