当前位置:网站首页>PHP封装一个文件上传类(支持单文件多文件上传)
PHP封装一个文件上传类(支持单文件多文件上传)
2022-06-24 08:08:00 【BigChen_up】
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;
}
}
边栏推荐
- Zero foundation self-study SQL course | syntax sequence and execution sequence of SQL statements
- Digital cloud released the 2022 white paper on digital operation of global consumers in the beauty industry: global growth solves marketing problems
- 浮点数表示法(总结自CS61C和CMU CSAPP)
- 深入了解 border
- 198. 打家劫舍
- CF566E-Restoring Map【bitset】
- Code written by mysql, data addition, deletion, query and modification, etc
- Epidemic situation, unemployment, 2022, we shouted to lie down!
- Installation of sophus package in slam14 lecture
- 【LeetCode】415. String addition
猜你喜欢

Huawei Router: IPSec Technology

Support vector machine (SVC, nusvc, linearsvc)

【bug】@JsonFormat 使用时出现日期少一天的问题

深入了解 border

L01_ How is an SQL query executed?

从618看京东即时零售的野心

Zero foundation self-study SQL course | having clause

MySQL data (Linux Environment) scheduled backup

【gdb调试工具】| 如何在多线程、多进程以及正在运行的程序下调试

Squid代理服务器应用
随机推荐
普通人没有学历,自学编程可以月入过万吗?
Mba-day25 best value problem - application problem
Weekly recommended short video: is the ultimate form of computing "meta universe"?
Redis实现全局唯一ID
520. detect capital letters
可直接套用的Go编码规范
Solution: the word of jmeter5.5 on the win11 lower interface is very small
【ES6闯关】Promise堪比原生的自定义封装(万字)
【输入法】迄今为止,居然有这么多汉字输入法!
Tools
linux(centos7.9)安装部署mysql-cluster 7.6
P6117-[JOI 2019 Final]コイン集め【贪心】
Depens:*** but it is not going to be installed
Some common pitfalls in getting started with jupyter:
YOLOX backbone——CSPDarknet的实现
解决:jmeter5.5在win11下界面上的字特别小
12、 Demonstration of all function realization effects
1704. judge whether the two halves of a string are similar
Numpy numpy中的np.c_和np.r_详解
When programmers are asked if they can repair computers... | daily anecdotes