<?php
/**
* 获取上传文件信息,处理单文件和多文件上传
* @return array 上传文件信息
*/
function getFiles()
{
$i = 0;
$files=[];
foreach ($_FILES as $file) {
if (is_string($file["name"])) {
$files[$i] = $file;
$i++;
} elseif (is_array($file["name"])) {
foreach ($file["name"] as $key => $val) {
$files[$i]["name"] = $file["name"][$key];
$files[$i]["type"] = $file["type"][$key];
$files[$i]["tmp_name"] = $file["tmp_name"][$key];
$files[$i]["error"] = $file["error"][$key];
$files[$i]["size"] = $file["size"][$key];
$i++;
}
}
}
return $files;
}
/**
* 获取文件的扩展名
* @param $filename:文件名
* @return string 扩展名
*/
function getExt($filename)
{
return strtolower(pathinfo($filename, PATHINFO_EXTENSION));
}
/**
* 生成唯一字符串作为文件名
* @return string 唯一文件名
*/
function getUniName()
{
return md5(uniqid(microtime(true), true));
}
/**
* 上传文件主处理模块
* @param $fileInfo:文件信息
* @param string $path:上传文件路径
* @param bool $flag:是否开启验证是否为真实图片
* @param int $maxSize:文件最大上传大小
* @param array $allowExt:允许的文件扩展名
* @return array 信息
*/
function upload_file($fileInfo, $path = "./uploads", $flag = true, $maxSize = 2*1024 * 1024, $allowExt = ["jpeg", 'jpg', 'png', 'gif'])
{
$res = [];
if ($fileInfo['error'] == UPLOAD_ERR_OK) {
$ext = getExt($fileInfo["name"]);
$uniName = getUniName();
$dest = $path . "/" . $uniName . "." . $ext;
//检测上传文件大小
if ($fileInfo["size"] > $maxSize) {
$res["msg"] = $fileInfo["name"] . "上传文件过大";
}
//上传文件类型
if (!in_array($ext, $allowExt)) {
$res["msg"] = $fileInfo["name"] . "非法文件类型";
}
//检测是否为真实图片
if ($flag) {
if (!getimagesize($fileInfo["tmp_name"])) {
$res["mes"] = $fileInfo["name"] . "不是真实图片";
}
}
if ($res) return $res;
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
if (!@move_uploaded_file($fileInfo["tmp_name"], $dest)) {
$res['msg'] = $fileInfo["name"] . "文件上传失败";
} else {
$res["msg"] = $fileInfo["name"] . "文件上传成功";
$res["dest"] = $dest;
}
return $res;
} else {
//判断错误信息
switch ($fileInfo["error"]) {
case 1:
$res["mes"] = "上传文件超过php配置文件中upload_max_filesize选项的值";
break;
case 2:
$res["mes"] = "超过了表单MMAX_FILE_SIZE限制的大小";
break;
case 3:
$res["mes"] = "文件部分被上传";
break;
case 4:
$res["mes"] = "没有选择上传文件";
break;
case 6:
$res["mes"] = "没有找到临时目录";
break;
case 7:
$res['msg'] = "文件写入失败";
break;
case 8:
$res["mes"] = "系统错误";
break;
}
return $res;
}
}