精准提取文件扩展名需先用strrchr定位最后一个点号,再用substr(,1)截取点后内容;若无点号则返回false,必须判空避免警告,推荐三元判断写法。

从文件名字符串中精准提取扩展名,需要处理点号位置不确定、多级扩展名(如.tar.gz)或无扩展名等情况,strrchr和substr组合能稳定定位最后一个点号并截取后续内容。
用strrchr定位最后一个点号位置
调用strrchr($filename, '.'),它会返回从【最后一个匹配字符开始的子串】,包括点号本身。例如strrchr('archive.tar.gz', '.')返回'.tar.gz';若文件名不含点号(如'config'),函数返回false——这是关键前提,后续操作必须先判断返回值是否为false,否则substr会报错。
用substr截取点号之后的内容
第一步:获取strrchr返回值,存入变量$dotPart;
第二步:检查$dotPart是否为false,是则后缀为空;
第三步:若$dotPart非false,用substr($dotPart, 1)去掉开头的点号,得到纯后缀;
第四步:注意substr第二个参数为1,不是0——从索引1开始取,才能跳过点号。漏掉这一步会把点号一起带上,导致后缀变成'.jpg'而非'jpg'。
完整组合写法(一行式)
方法一:substr(strrchr($filename, '.'), 1)——这行代码简洁,但【当文件名不含点号时会触发PHP警告】,因为strrchr返回false,substr(false, 1)非法;
方法二:加三元判断$dotPart = strrchr($filename, '.'); $ext = $dotPart ? substr($dotPart, 1) : '';——安全可靠,明确分离定位与截取逻辑;
方法三:用error suppression符@substr(strrchr($filename, '.'), 1)——虽可抑制警告,但掩盖了真实问题,不推荐。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











