在PHP中提取文件名并分离后缀必须分两步:先用basename获取不含路径的文件名,再用pathinfo、strrpos+substr或explode+end从该文件名中安全提取后缀,避免因路径干扰或多点文件名导致错误。

在PHP中提取文件名并分离后缀时,直接对完整路径调用basename会导致后缀丢失或误判,必须分两步处理:先用basename获取不含路径的文件名,再从该结果中截取后缀。
先用basename提取纯文件名
调用basename($path)传入完整路径字符串,它会自动剥离所有目录层级,只返回末尾的文件名部分(含扩展名)。
这一步不能省略或跳过,否则后续操作会作用于带斜杠的路径字符串,substr或strrpos将定位错误。
从文件名中安全提取后缀
方法一:用pathinfo配合PATHINFO_EXTENSION
立即学习“PHP免费学习笔记(深入)”;
对上一步得到的文件名(如"report_v2.pdf")调用pathinfo($filename, PATHINFO_EXTENSION),直接返回"pdf"。
方法二:用strrpos + substr组合
先用strrpos($filename, '.')找最后一个点的位置;如果返回false说明无后缀,否则用substr($filename, strrpos($filename, '.') + 1)截取点之后全部字符。
【注意:用strpos会错取第一个点,遇到"archive.tar.gz"这类多点文件名时必然出错】
方法三:用explode + end
执行$parts = explode('.', $filename),再用end($parts)获取最后一段。但需先判断$parts是否至少有两个元素,否则end可能返回空或警告。
连贯操作示例
第一步:$barename = basename('/var/log/app/error_2024.log');
第二步:$ext = pathinfo($barename, PATHINFO_EXTENSION);
此时$ext值为"log",$barename值为"error_2024.log"。



















