You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP和HTML实现3张图片的多文件上传功能?

3文件上传表单的PHP实现方案

前端HTML表单

表单必须设置enctype="multipart/form-data"才能支持文件上传,以下是包含3个文件输入框的表单代码:

<form action="upload.php" method="post" enctype="multipart/form-data">
  <label for="file1">文件1:</label>
  <input type="file" name="file1" id="file1" accept="image/*,application/pdf">
  <br>
  <label for="file2">文件2:</label>
  <input type="file" name="file2" id="file2" accept="image/*,application/pdf">
  <br>
  <label for="file3">文件3:</label>
  <input type="file" name="file3" id="file3" accept="image/*,application/pdf">
  <br>
  <input type="submit" value="上传文件" name="submit">
</form>

说明:accept属性可选,用来限制用户可选择的文件类型,示例中允许图片和PDF,可根据需求修改。

后端PHP处理脚本(upload.php)

以下是处理3个文件上传的核心代码,包含完整的验证和存储逻辑:

<?php
// 定义上传目录,自动创建不存在的目录
$uploadDir = 'uploads/';
if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

// 允许的文件MIME类型和最大文件大小(5MB)
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];
$maxFileSize = 5 * 1024 * 1024;

// 单个文件上传处理函数
function processFileUpload($file, $uploadDir, $allowedTypes, $maxSize) {
    // 检查上传错误
    if ($file['error'] !== UPLOAD_ERR_OK) {
        return "上传错误,错误码:{$file['error']}";
    }

    // 验证文件类型
    if (!in_array($file['type'], $allowedTypes)) {
        return '不支持该文件类型';
    }

    // 验证文件大小
    if ($file['size'] > $maxSize) {
        return '文件超过最大限制(5MB)';
    }

    // 生成安全文件名,避免重名和恶意路径
    $safeFileName = uniqid() . '-' . basename($file['name']);
    $targetPath = $uploadDir . $safeFileName;

    // 将临时文件移动到上传目录
    if (move_uploaded_file($file['tmp_name'], $targetPath)) {
        return "上传成功:{$safeFileName}";
    } else {
        return '文件存储失败';
    }
}

// 处理表单提交
if (isset($_POST['submit'])) {
    $uploadResults = [];
    
    if (isset($_FILES['file1'])) {
        $uploadResults['文件1'] = processFileUpload($_FILES['file1'], $uploadDir, $allowedMimeTypes, $maxFileSize);
    }
    if (isset($_FILES['file2'])) {
        $uploadResults['文件2'] = processFileUpload($_FILES['file2'], $uploadDir, $allowedMimeTypes, $maxFileSize);
    }
    if (isset($_FILES['file3'])) {
        $uploadResults['文件3'] = processFileUpload($_FILES['file3'], $uploadDir, $allowedMimeTypes, $maxFileSize);
    }

    // 输出上传结果
    foreach ($uploadResults as $fileLabel => $result) {
        echo "<p>{$fileLabel}:{$result}</p>";
    }
}
?>

重要注意事项

  • 确保服务器上的uploads/目录拥有写入权限(通常设置为755)
  • 不要直接使用用户上传的原始文件名,避免路径遍历攻击和文件名冲突
  • 生产环境中建议增加额外的文件内容验证(比如用getimagesize()检查图片真实性)
  • 可根据需求调整允许的文件类型和最大大小

内容的提问来源于stack exchange,提问作者Mathias Degen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:16:06