一. 單文件上傳
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);
/**
* 第一步: 預(yù)定義限制長傳文件的條件
*/
//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;
}
二. 文件上傳函數(shù)的封裝
文件上傳函數(shù)多次調(diào)用, 所以進(jìn)行函數(shù)封裝
$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. 重組上傳數(shù)字信息
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);