要提取文件扩展名需先用strlen获取字符串总字节数,再用strrpos定位最后一个点的字节偏移量,若无点则返回空字符串,最后用substr从该位置截取含点的后缀或从点后一位截取纯扩展名。

需要从一个文件名字符串中手动提取扩展名,比如从“report_v2.3.pdf”里只拿到“.pdf”,但又不想用pathinfo或explode这类函数,就得靠substr和strlen精准控制截取位置。
先用strlen算出整个字符串长度
调用 strlen($filename) 获取字符串总字符数,注意它返回的是字节数,不是Unicode字符数——如果字符串含中文或emoji,这个值会大于你肉眼看到的字符个数。
这一步不能跳过,因为后续所有偏移量都依赖这个基准值。
定位最后一个点的位置
用 strrpos($filename, '.') 找到最后一个点的索引位置。它返回的是从0开始的字节偏移量,比如 “a.txt” 中的点在索引1处。
【如果文件名不含点,strrpos会返回false,直接传给substr会导致截取失败】
所以必须加判断:if (false === $dotPos) { return ''; },否则后续操作会出错。
用substr截取后缀
方法一:从点的位置开始截到末尾
substr($filename, $dotPos)
方法二:更严谨,只取点及之后全部内容(等价于方法一,但语义更明确)
substr($filename, $dotPos, strlen($filename) - $dotPos)
方法三:如果只要纯后缀名(不含点),就从点后一位开始截
substr($filename, $dotPos + 1)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











