引言

前端准备

<!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上传的。

总结