引言
前端准备
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>图片上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
选择图片:<input type="file" name="image[]" multiple>
<input type="submit" value="上传">
</form>
</body>
</html>
在这个表单中,multiple 属性允许用户选择多个文件,name="image[]" 表示上传的文件将被存储在一个数组中。
后端处理
<?php
// upload.php
// 设置上传目录
$uploadDir = 'uploads/';
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
$images = $_FILES['image'];
foreach ($images['name'] as $key => $name) {
// 检查文件是否通过HTTP POST上传
if ($images['error'][$key] == 0) {
// 创建唯一的文件名
$fileExt = pathinfo($name, PATHINFO_EXTENSION);
$newFileName = uniqid() . '.' . $fileExt;
$fileTempName = $images['tmp_name'][$key];
$uploadPath = $uploadDir . $newFileName;
// 移动上传的文件到目标目录
if (move_uploaded_file($fileTempName, $uploadPath)) {
echo "文件上传成功: " . htmlspecialchars($newFileName) . "<br>";
} else {
echo "文件上传失败: " . htmlspecialchars($name) . "<br>";
}
} else {
echo "文件上传错误: " . htmlspecialchars($name) . "<br>";
}
}
}
?>
在这个脚本中,我们首先设置了上传目录$uploadDir。然后,我们检查是否有文件通过POST请求上传。如果有的话,我们将遍历上传的文件数组,对每个文件进行处理。我们使用uniqid()函数创建一个唯一的文件名,以确保上传的文件不会覆盖现有的文件。然后,我们使用move_uploaded_file()函数将文件从临时目录移动到目标目录。
安全注意事项
- 检查上传的文件类型,确保它们是有效的图片文件。
- 对上传的文件名进行清理,以防止路径遍历攻击。
- 设置合适的文件上传大小,以避免服务器过载。
- 使用
move_uploaded_file()函数确保文件是通过HTTP POST上传的。