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

多图片数组上传时宽高验证异常问题求助

图片上传尺寸验证修复方案

你的代码主要有三个问题导致尺寸超标的图片仍被保存:

  • 循环嵌套逻辑混乱,每次处理单张图片时都遍历所有上传文件,导致尺寸变量无法对应当前图片
  • 条件判断顺序错误,先执行了文件保存操作,之后才判断尺寸,错误已经无法挽回
  • 变量被重复赋值覆盖,$photo_temp先存临时路径数组,后来又被改成关联数组存尺寸信息,导致后续取临时路径出错

下面是修复后的完整代码,同时优化了逻辑流程:

$valid = 1;
$error_message = '';
$upload_dir = "../assets/uploads/product_photos/";
$m = 0;
$z = 0;
$final_name1 = [];

// 遍历所有上传的图片文件
foreach ($_FILES['photo']['tmp_name'] as $key => $single_file) {
    // 跳过空文件
    if (empty($single_file)) continue;

    // 获取当前图片的尺寸
    $image_size = getimagesize($single_file);
    $width = $image_size[0];
    $height = $image_size[1];

    // 获取文件扩展名
    $filename = $_FILES['photo']['name'][$key];
    $my_ext1 = pathinfo($filename, PATHINFO_EXTENSION);
    $my_ext1 = strtolower($my_ext1); // 统一转小写,避免大小写问题

    // 先验证尺寸
    if ($width > 300 || $height > 200) {
        $valid = 0;
        $error_message .= "图片 {$filename} 尺寸超出限制,需在300×200以内<br>";
        continue; // 跳过当前文件的后续处理
    }

    // 再验证扩展名
    if (!in_array($my_ext1, ['jpg', 'png', 'jpeg', 'gif'])) {
        $valid = 0;
        $error_message .= "图片 {$filename} 格式不正确,仅支持jpg/png/jpeg/gif<br>";
        continue;
    }

    // 验证通过,保存文件
    $final_name = $z . '.' . $my_ext1;
    $final_path = $upload_dir . $final_name;
    if (move_uploaded_file($single_file, $final_path)) {
        $final_name1[$m] = $final_name;
        $m++;
        $z++;
    } else {
        $valid = 0;
        $error_message .= "图片 {$filename} 保存失败<br>";
    }
}

// 最后处理结果提示
if (!$valid) {
    // 这里可以输出错误信息到页面,对应目标UI效果
    echo $error_message;
} else {
    echo "所有图片上传成功";
}

关键改动说明

  • 直接遍历$_FILES['photo']数组,确保每张图片的尺寸、扩展名、保存操作一一对应
  • 调整验证顺序:先验证尺寸,再验证格式,只有所有验证通过才执行文件保存
  • 增加了文件保存失败的错误处理,同时给错误提示加上文件名,方便用户定位问题
  • 统一变量命名,避免重复赋值导致的逻辑混乱

内容的提问来源于stack exchange,提问作者Worthless Me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:50:45