在 PHP 中处理文件上传是非常常见的需求。下面是一个基本的 PHP 文件上传示例,包括 HTML 表单和 PHP 脚本两部分。这个示例展示了如何接收用户上传的文件,并将文件保存到服务器上的指定目录。
### 第一步:创建 HTML 表单
创建一个简单的 HTML 表单,允许用户选择文件上传。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>上传文件</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
选择文件:
<input type="file" name="uploaded_file" id="uploaded_file">
<br><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>
### 第二步:编写 PHP 脚本
创建一个名为 `upload.php` 的 PHP 文件来处理文件上传逻辑。
<?php
// 定义上传文件的目标目录
$target_dir = "uploads/";
// 检查目标目录是否存在,如果不存在,则创建
if (!is_dir($target_dir)) {
mkdir($target_dir, 0777, true);
}
// 获取文件名
$target_file = $target_dir . basename($_FILES["uploaded_file"]["name"]);
// 检查文件是否上传成功
if (move_uploaded_file($_FILES["uploaded_file"]["tmp_name"], $target_file)) {
echo "文件 ". htmlspecialchars(basename($_FILES["uploaded_file"]["name"])). " 已经上传成功。";
} else {
echo "对不起,上传失败。";
}
// 可选:添加额外的安全检查
// 检查文件类型
$fileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"
&& $fileType != "gif" ) {
echo "抱歉,只允许 JPG, JPEG, PNG & GIF 文件格式。";
exit;
}
// 检查文件大小
if ($_FILES["uploaded_file"]["size"] > 500000) { // 限制为500KB
echo "抱歉,您的文件太大。";
exit;
}
// 检查是否有错误
if ($_FILES["uploaded_file"]["error"] > 0) {
echo "错误: " . $_FILES["uploaded_file"]["error"] . "<br>";
exit;
}
?>
### 说明
1. **HTML 表单**:
- 使用 `enctype="multipart/form-data"` 属性来允许文件上传。
- `` 元素允许用户选择文件。
2. **PHP 脚本**:
- `$_FILES` 是一个预定义的全局数组,包含了所有上传文件的信息。
- `move_uploaded_file()` 函数用来将上传的临时文件移动到指定的目标位置。
- 这个脚本还包括了一些基本的安全检查,例如检查文件类型和大小。
### 注意事项
- **安全性**: 确保对上传的文件进行充分的验证和清理,以防止恶意文件的上传。
- **权限**: 确保上传目录的权限设置正确,以便 PHP 脚本能写入文件。
- **错误处理**: 处理上传过程中可能出现的各种错误,如文件大小超出限制、文件类型不被接受等。
请确保你的服务器配置允许文件上传,并且设置了适当的 `upload_max_filesize` 和 `post_max_size` 等配置选项。此外,最好在实际部署前测试这个脚本以确保一切正常运行。