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

如何从PHP的$_FILE[]数组中移除不符合尺寸要求的指定图片?

解决PHP上传图片中移除不符合尺寸要求文件的问题

我来帮你搞定这个需求——从上传的图片数组里移除宽度小于854或高度小于1280的图片。先梳理下原代码里的几个需要修正的点,再给你完整的可运行方案:

原代码存在的问题

  • 使用sizeof()遍历数组虽然可行,但PHP里更推荐用count()来获取数组长度
  • 没有判断getimagesize()的返回值:如果上传的不是有效图片,这个函数会返回false,直接取索引会引发错误
  • $_FILE[]这种写法是语法错误,需要构建合法的文件数组来保留符合要求的文件
  • 尺寸判断用字符串(比如"854")不够严谨,直接用数字类型更稳妥

完整解决方案代码

// 获取上传的文件信息
$uploadedFiles = $_FILES["files"];
// 初始化数组存放符合要求的文件,结构和原生$_FILES保持一致
$validFiles = [
    'name' => [],
    'tmp_name' => [],
    'type' => [],
    'size' => [],
    'error' => []
];

// 遍历所有上传的文件
$fileCount = count($uploadedFiles['tmp_name']);
for ($i = 0; $i < $fileCount; $i++) {
    // 跳过上传出错的文件(比如文件过大、上传中断等)
    if ($uploadedFiles['error'][$i] !== UPLOAD_ERR_OK) {
        continue;
    }

    $tmpPath = $uploadedFiles['tmp_name'][$i];
    // 获取图片尺寸,同时验证是否为有效图片
    $imageSize = getimagesize($tmpPath);
    if (!$imageSize) {
        // 不是有效图片,直接跳过
        continue;
    }

    $width = $imageSize[0];
    $height = $imageSize[1];

    // 判断是否符合尺寸要求:宽度≥854 且 高度≥1280
    if ($width >= 854 && $height >= 1280) {
        // 将符合要求的文件信息加入validFiles数组
        $validFiles['name'][] = $uploadedFiles['name'][$i];
        $validFiles['tmp_name'][] = $tmpPath;
        $validFiles['type'][] = $uploadedFiles['type'][$i];
        $validFiles['size'][] = $uploadedFiles['size'][$i];
        $validFiles['error'][] = $uploadedFiles['error'][$i];
    }
}

// 现在validFiles就是只包含符合尺寸要求的图片数组,可以用它做后续处理
// 示例:移动符合要求的图片到服务器指定目录
$targetDir = './uploads/';
// 确保目标目录存在
if (!is_dir($targetDir)) {
    mkdir($targetDir, 0755, true);
}
foreach ($validFiles['tmp_name'] as $index => $tmpPath) {
    $targetPath = $targetDir . basename($validFiles['name'][$index]);
    move_uploaded_file($tmpPath, $targetPath);
}

额外说明

  • 代码里加入了上传错误的判断,避免无效文件干扰后续逻辑
  • 增加了非图片文件的过滤,确保只处理有效图片资源
  • 最终的validFiles结构和原生$_FILES["files"]完全一致,后续的文件处理逻辑可以直接复用

内容的提问来源于stack exchange,提问作者Nithish P K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:58