一. 单文件上传
1.1 表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="./onefile.php" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="提交">
</form>
</body>
</html>
1.2 php 代码
//解决中文乱码
header('Content-Type:text/html;caharset=utf-8');
// echo "<pre>";
// var_dump($_FILES);
/**
* 第一步: 预定义限制长传文件的条件
*/
//1. 定义允许文件上传的类型
$arr_type = [
'image/jpeg',
'image/png',
'image/gif'
];
//2. 定义允许上传文件的大小
$allow_file_size = 2048000;
//* 获取原始文件名(因为下面用得到, 所以提前获取)
$file_name = $_FILES['pic']['name'];
/**
* 第二步: 判断上传文件信息是否符合要求
*/
//1. 判断文件是否上传成功
//接收文件上传的错误代码
$error_code = $_FILES['pic']['error'];
if ($error_code != 0) {
echo '文件'.$file_name .'上传错误';
die;
}
//2. 判断上传文件的类型是否合法
//获取上传文件的类型
$file_type = $_FILES['pic']['type'];
if (!in_array($file_type, $arr_type)) {
echo '文件'.$file_name .'类型不合法';
die;
}
//3. 判断文件上传文件的大小是否合法
//获取上传文件的大小
$file_size = $_FILES['pic']['size'];
if ($file_size > $allow_file_size) {
echo '文件'.$file_name .'大小超出允许的的值'.($allow_file_size/1000000).'M';
die;
}
/**
* 第三步: 将上传文件移动到指定的位置
*/
//获取上传文件的临时文件名
$tmp_name = $_FILES['pic']['tmp_name'];
//获取原始文件的后缀名
$tmp_arr = explode('.', $file_name);
$extension_name = array_pop($tmp_arr);
//生成新的文件名,(保证文件名唯一)
do {
$new_file_name = md5($tmp_name.time());
} while (file_exists('./'.$new_file_name.'.'.$extension_name));
//将文件上传到指定的位置
$bool = move_uploaded_file($tmp_name, './'.$new_file_name.'.'.$extension_name);
// 判断文件是否上传成功
if ($bool) {
echo '文件'.$file_name .'上传成功';
die;
} else {
echo '文件'.$file_name .'上传失败';
die;
}
二. 文件上传函数的封装
文件上传函数多次调用, 所以进行函数封装
$upload_file_info = $_FILES['pic'];
echo '<pre>';
// var_dump($upload_file_info);
foreach ($upload_file_info['name'] as $key => $value) {
$files[$key]['name'] = $value;
$files[$key]['type'] = $upload_file_info['type'][$key];
$files[$key]['tmp_name'] = $upload_file_info['tmp_name'][$key];
$files[$key]['error'] = $upload_file_info['error'][$key];
$files[$key]['size'] = $upload_file_info['size'][$key];
}
foreach ($files as $key => $value) {
$res[$key] = my_upload_file($value);
}
var_dump($res);
function my_upload_file($file_info, $arr_type=['image/jpeg','image/png','image/gif'], $file_allow_size=1000, $path='./')
{
// 获取原始文件名
$file_name = $file_info['name'];
//1. 判断文件是否上传成功
//接收文件上传的错误代码
$error_code = $file_info['error'];
if ($error_code != 0) {
$result['status'] = false;
$result['info'] = '文件'.$file_name.'上传失败';
return $result;
}
//2 判断上传文件的类型是否合法
//获取上传文件的类型
$file_type = $file_info['type'];
if (!in_array($file_type, $arr_type)) {
$result['status'] = false;
$result['info'] = '文件'.$file_name.'类型不合法';
return $result;
}
//3. 判断文件上传文件的大小是否合法
//获取上传文件的大小
$file_size = $file_info['size'];
if ($file_size > $file_allow_size) {
$result['status'] = false;
$result['info'] = '文件'.$file_name.'大小超出允许的的值'.($file_allow_size/1000000).'M';
return $result;
}
/**
* 第三步: 将上传文件移动到指定的位置
*/
//获取上传文件的临时文件名
$tmp_name = $file_info['tmp_name'];
//获取原始文件的后缀名
$tmp_arr = explode('.', $file_name);
$extension_name = array_pop($tmp_arr);
//处理文件上传路径
$path = rtrim($path, '/').'/';
//生成新的文件名,
do {
$new_file_name = md5($tmp_name.time()).'.'.$extension_name;
} while (file_exists($path.$new_file_name));
//上传文件
$bool = move_uploaded_file($tmp_name, $path.$new_file_name);
// 判断文件是否上传成功
if ($bool) {
$result['status'] = true;
$result['info'] = $new_file_name;
return $result;
} else {
$result['status'] = false;
$result['info'] = '文件'.$file_name.'移动失败';
return $result;
}
}
三. 多文件上传
3.1 表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="function.php" method="post" enctype="multipart/form-data">
<input type="file" multiple="true" name="pic[]">
<input type="submit" value="提交">
</form>
</body>
</html>
3.2 PHP代码
//1. 接收多文件上传信息
$upload_file_info = $_FILES['pic'];
// echo '<pre>';
// var_dump($upload_file_info);
//2. 重组上传数字信息
foreach ($upload_file_info['name'] as $key => $value) {
$files[$key]['name'] = $value;
$files[$key]['type'] = $upload_file_info['type'][$key];
$files[$key]['tmp_name'] = $upload_file_info['tmp_name'][$key];
$files[$key]['error'] = $upload_file_info['error'][$key];
$files[$key]['size'] = $upload_file_info['size'][$key];
}
//var_dump($files);
//3. 上传文件
foreach ($files as $key => $value) {
$res[$key] = my_upload_file($value);
}
//4. 打印多文件上传信息
var_dump($res);