1. 前端准备
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传图片" />
</form>
这里使用了<input type="file">标签来允许用户选择文件,并将表单的enctype属性设置为multipart/form-data,这是上传文件所必需的。
2. 后端处理
2.1 文件类型检查
function isImage($file) {
$imageInfo = getimagesize($file['tmp_name']);
return $imageInfo !== false;
}
if (!isImage($_FILES['image'])) {
die("上传的文件不是图片!");
}
2.2 文件大小
接下来,可以上传文件的大小,以避免服务器资源被过度占用:
$maxFileSize = 2 * 1024 * 1024; // 2MB
if ($_FILES['image']['size'] > $maxFileSize) {
die("上传的文件过大!");
}
2.3 文件重命名
为了避免文件名冲突,可以将上传的文件重命名为一个唯一的名称。以下是一个简单的重命名方法:
$targetPath = "uploads/" . uniqid() . $_FILES['image']['name'];
2.4 移动文件
最后,将文件从临时目录移动到目标目录:
if (move_uploaded_file($_FILES['image']['tmp_name'], $targetPath)) {
echo "文件上传成功!";
} else {
die("文件上传失败!");
}
3. 完整示例
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isImage($_FILES['image'])) {
die("上传的文件不是图片!");
}
$maxFileSize = 2 * 1024 * 1024; // 2MB
if ($_FILES['image']['size'] > $maxFileSize) {
die("上传的文件过大!");
}
$targetPath = "uploads/" . uniqid() . $_FILES['image']['name'];
if (move_uploaded_file($_FILES['image']['tmp_name'], $targetPath)) {
echo "文件上传成功!";
} else {
die("文件上传失败!");
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>图片上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传图片" />
</form>
</body>
</html>