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;
}
}
PHP封装一个文件上传类(支持单文件多文件上传)
猜你喜欢
转载自blog.csdn.net/weixin_42905245/article/details/103641763
今日推荐
周排行