PHP中用%通配符匹配图片后缀的switch语句不生效原因求解
核心问题原因
- PHP的
switch语句执行的是全等字符串匹配,你写的"%.jpg"是SQL场景下的通配符写法,PHP原生字符串相等判断不识别这类规则,只会匹配文件名恰好为%.jpg的文件,自然无法匹配到后缀为.jpg的普通图片文件。 - 如果你需要用通配符规则匹配文件名,可以使用PHP内置的
fnmatch()函数,它支持*、?这类标准通配符,例如fnmatch('*.jpg', $imagee)就可以匹配所有后缀为.jpg的文件。
可直接运行的修复代码
更简洁稳定的方案是先提取文件后缀再做匹配,还可以处理大小写兼容问题:
$png = array(); $jpeg = array(); $jpg = array(); $gif = array(); if($dirOpen = opendir('imagefiles')) { while(($imagee = readdir($dirOpen))!==false) { if ($imagee == '.' || $imagee == '..') continue; // 提取文件后缀并转小写,兼容.JPG、.Png这类大小写混合的后缀 $file_ext = strtolower(pathinfo($imagee, PATHINFO_EXTENSION)); switch($file_ext) { case "png": $png[] = $imagee; break; case "jpeg": $jpeg[] = $imagee; break; case "jpg": $jpg[] = $imagee; break; case "gif": $gif[] = $imagee; break; default: echo "error 不支持的文件类型:".$imagee . PHP_EOL; } } print_r($jpg); closedir($dirOpen); } $imagesss = array_merge($png, $jpeg, $jpg, $gif);
优化说明
- 替换原逻辑中的
or为||,避免逻辑运算符优先级问题导致判断出错 - 增加后缀转小写处理,避免大写后缀的文件无法匹配
- 报错信息增加文件名输出,方便排查异常文件
内容的提问来源于stack exchange,提问作者user14579575
相关产品推荐
相关产品推荐

