PHP
PHP实现多张图片上传
PHP实现多张图片上传
最近在做一个项目模块的时候,需要用到多张图片上传,博主使用的是原生PHP,所以将多张图片上传
的代码跟大家分享一下。首先我们先写前端代码:

然后是后端PHP代码,负责接收前端传过来的图片并保存在本地,代码如下:
#获取用户上传的文件
$files = getFile();
#判断是否上传了文件
if (count($files) 9) {
echo "图片上传最大数为9张";
exit();
}
#初始化保存地址数组
$returnList = array();
#循环遍历文件
foreach ($files as $fileInfo) {
#上传文件
$res = uploadFile($fileInfo);
#判断是否上传成功
if ($res["code"] != 200) {
//删除本地文件【防止占用空间】
deleteImage($returnList);
//返回
echo $res["msg"];
exit();
}
#添加进待上传至数组
$returnList[] = $res["msg"];
}
#返回
return $returnList;
//////////////////// 操作本地图片方法 ///////////////////
/**
* 获取用户上传的图片元素
* @return array
*/
function getFile()
{
$i = 0;
$files = array();
foreach ($_FILES as $file) {
if (is_string($file['name'])) {
$files['$i'] = $file;
$i++;
} elseif (is_array($file['name'])) {
foreach ($file['name'] as $k => $v) {
$files[$i]['name'] = $file['name'][$k];
$files[$i]['type'] = $file['type'][$k];
$files[$i]['tmp_name'] = $file['tmp_name'][$k];
$files[$i]['error'] = $file['error'][$k];
$files[$i]['size'] = $file['size'][$k];
$i++;
}
}
}
return $files;
}
/**
* 文件上传至本地
* @param $file
* @param string $path
* @param int $max_size
* @param array $allowExt
* @return array
*/
function uploadFile($file,$path='uploads',$max_size=3000000,$allowExt=['jpeg', 'jpg', 'png'])
{
#获取图片基础参数
$filename = $file['name'];
$type = $file['type'];
$temp_name = $file['tmp_name'];
$error = $file['error'];
$size = $file['size'];
#判断
if ($error == UPLOAD_ERR_OK) {
//判断大小是否超过
if ($size > $max_size) {
return array(
'code' => 404,
'msg' => $filename . "文件超过规定上传大小"
);
}
//判断是否是上传图片
$ext = getExt($filename);
if (!in_array($ext, $allowExt)) {
return array(
'code' => 404,
'msg' => $filename . '文件名不合乎规范'
);
}
//判断传输方式
if (!is_uploaded_file($temp_name)) {
return array(
'code' => 404,
'msg' => $filename . "文件不是通过HTTP POST 方法上传上传过来的"
);
}
//判断暂时存放地方是否有权限
if (!file_exists($path)) {
mkdir($path, 0777, true);
chmod($path, 0777);
}
//重新命名图片名字
$fileName = getUniName();
$destination = $path . '/' . $fileName . '.' . $ext;
if (move_uploaded_file($temp_name, $destination)) {
return array(
'code' => 200,
'msg' => $destination
);
} else {
return array(
'code' => 404,
'msg' => $filename . "文件上传失败"
);
}
} else {
switch ($error) {
case '1':
return array(
'code' => 404,
'msg' => "超过了配置文件上传文件的大小"
);
break;
case '2':
return array(
'code' => 404,
'msg' => "超过表单设置上传文件文件的大小"
);
break;
case '3':
return array(
'code' => 404,
'msg' => "文件部分被上传"
);
break;
case '4':
return array(
'code' => 404,
'msg' => "没有文件被上传"
);
break;
case '6':
return array(
'code' => 404,
'msg' => "没有找到临时目录"
);
break;
case '7':
return array(
'code' => 404,
'msg' => "文件不可写"
);
break;
default:
return array(
'code' => 404,
'msg' => "上传文件失败"
);
break;
}
}
}
/**
* 获得文件扩展名
* @param string $filename 上传文件名
* @return string 返回扩展名
*/
function getExt($filename)
{
$arr = explode('.', basename($filename));
return end($arr);
}
/**
* 获得文件唯一扩展名
* @return string 经过md5后生成32位唯一的上传文件名
*/
function getUniName()
{
return md5(uniqid(microtime(true), true));
}
/**
* 删除本地图片【发生错误或者上传不上去】
* @param $imageList
*/
function deleteImage($imageList)
{
if (count($imageList) > 0) {
foreach ($imageList as $key => $value) {
if (file_exists($value)) {
unlink($value);
}
}
}
}这样我们就成功实现多张图片上传并防止中途出现意外,图片存留问他。
0条评论