php 制作文件上传类

上传文件需要注意的地方:
        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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值