PHP封装一个文件上传类(支持单文件多文件上传)


class Upload {
    //添加一个智能操作: 可以自动判断当前是多文件还是单文件, 来自动选择正确的方法进行处理
    public static function save($dir) {
        if (!file_exists($dir)) {
            // a/b/c 中间目录不存在,会自动创建!
            mkdir($dir, 0777, true);
        }

        //判断当前是多文件 还是 单文件上传
        //单文件上传的数组 是 二维数组, 多文件上传的数组是三维数组
        //做法: 判断是否为三维数组即可

        //reset()用于读取数组中的首个值
        $tmp = reset($_FILES);
        $tmp = reset($tmp);

        if (is_array($tmp)) {
            //是3维
            return self::saveMultiple($dir);
        } else {
            return self::saveSingle($dir);
        }
    }

    //多文件上传
    protected static function saveMultiple($dir) {
        //1.转换格式
        foreach ($_FILES as $key => $value) {
            foreach ($value as $kk => $vv) {
                foreach ($vv as $k => $v) {
                    $newArr[$k][$kk] = $v;
                }
            }
        }

        //2.循环保存
        $names = [];

        foreach ($newArr as $key => $value) {
            $filename = $value['tmp_name'];

            //随机名称: 重名 和 乱码问题
            $uniqueName = md5(microtime(true) . mt_rand(1e9, 9e9));
            //后缀名:
            $ext = pathinfo($value['name'], PATHINFO_EXTENSION);
            //拼接出名字:  ***.jpg
            $fn   = "$uniqueName.$ext";
            $dest = "files/$fn";

            $suc = move_uploaded_file($filename, $dest);
            //保存成功: 保存文件名到数组中
            if ($suc === true) {
                //索引数组新增元素
                $names[] = $fn;
            }
        }
        return $names;
    }

    //单文件上传操作
    protected static function saveSingle($dir) {
        foreach ($_FILES as $key => $value) {
            $filename = $value['tmp_name'];

            //随机名称: 重名 和 乱码问题
            $uniqueName = md5(microtime(true) . mt_rand(1e9, 9e9));
            //后缀名:
            $ext = pathinfo($value['name'], PATHINFO_EXTENSION);
            //拼接出名字:  ***.jpg
            $fn   = "$uniqueName.$ext";
            $dest = "$dir/$fn";

            $suc = move_uploaded_file($filename, $dest);
            //失败, 则返回false
            if ($suc === false) {
                return false;
            }
        }
        //如果没有失败, 就返回保存成功的文件名
        return $fn;
    }
}
发布了16 篇原创文章 · 获赞 13 · 访问量 2454

猜你喜欢

转载自blog.csdn.net/weixin_42905245/article/details/103641763
今日推荐