引言
1. 准备工作
2. 图片上传的基本流程
2.1 接收上传文件
首先,我们需要接收用户上传的文件。通常通过HTML表单来实现,如下所示:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传" />
</form>
这里,action 属性指定了处理文件上传的PHP脚本,enctype 属性设置为 "multipart/form-data",这是上传文件所必需的。
2.2 验证上传文件
if ($_FILES && isset($_FILES['image'])) {
$file = $_FILES['image'];
// 检查文件是否上传成功
if ($file['error'] === UPLOAD_ERR_OK) {
// 检查文件类型
$imageTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (in_array($file['type'], $imageTypes)) {
// 检查文件大小(例如:2MB)
$maxSize = 2 * 1024 * 1024;
if ($file['size'] <= $maxSize) {
// 文件类型和大小均符合要求,继续处理
} else {
die('文件大小超出。');
}
} else {
die('非法文件类型。');
}
} else {
die('文件上传失败。');
}
}
2.3 移动上传文件
使用move_uploaded_file()函数将文件从临时目录移动到目标目录:
$uploadPath = 'uploads/' . basename($file['name']);
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo '文件上传成功:' . $uploadPath;
} else {
die('文件上传失败。');
}
2.4 安全处理
- 检查文件名是否包含非法字符。
- 使用GD库对图片进行验证,确保上传的是有效的图片文件。
- 上传目录的访问权限,防止直接访问上传的图片文件。
3. 完整示例
<!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>
<?php
if ($_FILES && isset($_FILES['image'])) {
$file = $_FILES['image'];
// ...(验证上传文件代码)...
$uploadPath = 'uploads/' . basename($file['name']);
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo '文件上传成功:' . $uploadPath;
} else {
die('文件上传失败。');
}
}
?>