如何从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
相关产品推荐
相关产品推荐

