推荐使用pathinfo($path, pathinfo_extension)安全提取文件后缀,它不修改原始路径字符串;若路径无点号则返回空字符串,需用=== ''显式判断;为防路径含点误判,可先用basename()剥离路径再处理。

需要从PHP中提取文件后缀但又不能改动原始路径字符串,比如处理用户上传的文件名或配置中定义的路径时,必须保留原字符串完整性用于日志记录、二次拼接或安全校验。
用pathinfo()安全提取后缀
调用pathinfo($path, PATHINFO_EXTENSION)仅返回扩展名部分,不修改原始变量。
这一步操作起来很简单,直接传入路径变量即可,无需额外赋值或正则替换。
注意:如果路径不含点号(如“/var/log/nginx”),函数会返回空字符串,不是false也不是null——这点和isset判断逻辑不同,【务必用=== ''显式比对空字符串】,避免误判为有扩展名。
用strrchr()配合substr()手动截取
方法一:先用strrchr($path, '.')获取最后一个点及之后全部内容,再用substr去掉点。
方法二:用strripos($path, '.')定位最后一点位置,再用substr($path, $pos + 1)取后缀。
方法三:用basename($path)先剥离路径部分,再对文件名做点号处理——这能避免路径中含点(如“/home/user.v2/config.php”)导致误判,【推荐在不确定路径结构时优先使用】。
验证原始路径未被修改
第一步:定义原始路径变量$path = '/usr/local/bin/app_v1.2.0.tar.gz';
第二步:执行后缀提取操作,例如$ext = pathinfo($path, PATHINFO_EXTENSION);
第三步:用var_dump($path === '/usr/local/bin/app_v1.2.0.tar.gz');确认输出bool(true)。
只要不显式对$path重新赋值或传引用,PHP中字符串是值传递,默认不会改变原始变量。这是PHP底层字符串实现决定的,不是靠函数设计保证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











