文件上传
$_FILES 处理、文件类型/大小验证、move_uploaded_file
文件上传
PHP 通过 $_FILES 超全局变量处理上传的文件。关键步骤:验证类型和大小,用 move_uploaded_file 移到目标位置。
学完本章你将: 掌握 $_FILES 处理、文件验证、move_uploaded_file。
HTML 上传表单
html
<form method="POST" enctype="multipart/form-data">
<input type="file" name="avatar" accept="image/*">
<button type="submit">上传</button>
</form>
⚠️ 文件上传必须设置
enctype="multipart/form-data"——忘了这个 upload 就不会发送。
PHP 处理上传
php
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$file = $_FILES["avatar"];
// $_FILES 结构:
// $file["name"] — 原始文件名
// $file["type"] — MIME 类型
// $file["size"] — 文件大小(字节)
// $file["tmp_name"] — 临时文件路径
// $file["error"] — 错误码(0 = 成功)
// 检查上传是否成功
if ($file["error"] !== UPLOAD_ERR_OK) {
die("上传失败,错误码:" . $file["error"]);
}
// 验证大小(限制 2MB)
if ($file["size"] > 2 * 1024 * 1024) {
die("文件太大,最大 2MB");
}
// 验证类型
$allowed = ["image/jpeg", "image/png", "image/gif"];
if (!in_array($file["type"], $allowed)) {
die("只允许 JPG/PNG/GIF 图片");
}
// 生成唯一文件名
$ext = pathinfo($file["name"], PATHINFO_EXTENSION);
$newName = uniqid("img_") . "." . $ext;
$dest = "uploads/" . $newName;
if (move_uploaded_file($file["tmp_name"], $dest)) {
echo "上传成功:$dest";
} else {
echo "移动文件失败";
}
}