包括 one.html 和 one.php 两个文件
one.html
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单文件上传</title>
<style>
div {
margin: 20px;
}
</style>
</head>
<body>
<div>
<form action="one.php" method="post" enctype="multipart/form-data">
<input type="file" name="one_file">
<button>上传</button>
</form>
</div>
</body>
</html>
one.php
代码如下:
<?php
/*
* 操作步骤:
* 一、先获取文件相关信息
* 二、分步骤判断是否符合上传条件
* 三、上传条件全部符合,则正式上传并保存
*/
$file_type_cfg = ['jpg', 'jpeg', 'png', 'gif'];
$file_size_cfg = 1024 * 1024 * 10; //不超过 10 M
$file_path_cfg = __DIR__ . '/uploads/one/';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($_FILES) {
/* 一、先获取文件相关信息 */
//获取文件的原始文件名
$file_name = $_FILES['one_file']['name'];
//获取文件的临时文件名
$file_tmp_name = $_FILES['one_file']['tmp_name'];
//获取文件的错误代码
$file_error = $_FILES['one_file']['error'];
//获取文件的文件类型
$file_type = $_FILES['one_file']['type'];
//目录分隔符 DIRECTORY_SEPARATOR 不起作用
$file_extension = explode('/', $file_type)[1];
//获取文件的文件大小
$file_size = $_FILES['one_file']['size'];
/*
echo $file_name . '<br/>' . $file_tmp_name . '<br/>'
. $file_error . '<br/>' . $file_type . '<br/>'
. $file_size . '<br/>';
*/
/* 二、分步骤判断是否符合上传条件 */
//1、判断错误代码
if ($file_error > 0) {
switch ($file_error) {
case UPLOAD_ERR_INI_SIZE:
case 1:
die('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。');
case UPLOAD_ERR_FORM_SIZE:
case 2:
die('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。');
case UPLOAD_ERR_PARTIAL:
case 3:
die('文件只有部分被上传。');
case UPLOAD_ERR_NO_FILE:
case 4:
die('没有文件被上传。');
case UPLOAD_ERR_NO_TMP_DIR:
case 6:
die('找不到临时文件夹。');
case UPLOAD_ERR_CANT_WRITE:
case 7:
die('文件写入失败。');
// 错误信息参考地址: https://www.php.net/manual/zh/features.file-upload.errors.php
}
}
//2、判断扩展名是否允许
if (!in_array($file_extension, $file_type_cfg)) {
die("不允许上传 {$file_extension} 类型的文件");
}
//3、判断上传文件的大小
if ($file_size > $file_size_cfg) {
die("不允许上传超过 10M 的文件");
}
/* 三、上传条件全部符合,则正式上传并保存 */
//正式上传和保存文件
if (is_uploaded_file($file_tmp_name)) {
//生成不重复的临时文件名
$save_tmp_name = date('YmdHis', time()) . md5(mt_rand(10, 100)) . '.' . $file_extension;
$save_file_path = $file_path_cfg . $save_tmp_name;
if (move_uploaded_file($file_tmp_name, $save_file_path)) {
echo "{$file_name} 保存路径为:{$save_file_path}";
} else {
die('文件上传操作失败!');
}
} else {
die('您进行了非法操作哦!');
}
}
}