PHP怎样判断文件扩展名

来源:PHP编程网作者:零壳头衔:程序员
导读:本期聚焦于小伙伴创作的《PHP怎样判断文件扩展名》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP怎样判断文件扩展名》有用,将其分享出去将是对创作者最好的鼓励。

在PHP开发中,判断文件扩展名是文件处理环节的常见需求,比如上传文件时校验文件类型、批量处理特定格式文件等场景都需要用到。不同的实现方式在边界情况处理上表现不同,下面介绍几种常用的实现方法。

PHP怎样判断文件扩展名

使用pathinfo函数获取扩展名

pathinfo是PHP内置的专门用于解析文件路径信息的函数,它会返回一个包含文件路径各个部分的数组,其中extension键对应的就是文件的扩展名,这是最推荐的使用方式。

示例代码如下:

<?php
$filePath = 'test/image.jpg';
// 解析文件路径信息
$pathInfo = pathinfo($filePath);
// 获取扩展名,不存在时返回空字符串
$extension = $pathInfo['extension'] ?? '';
echo $extension; // 输出 jpg

// 也可以直接传入PATHINFO_EXTENSION参数获取扩展名
$extension2 = pathinfo($filePath, PATHINFO_EXTENSION);
echo $extension2; // 输出 jpg
?>

这种方式的优势是会自动处理路径中的点号,即使文件名中包含多个点号,也能正确提取最后一个点号后的内容作为扩展名,同时如果文件没有扩展名,会返回空值,不需要额外做过多的边界判断。

使用explode函数分割获取扩展名

explode函数可以按照指定的分隔符分割字符串,我们可以用点号作为分隔符,分割文件路径后取最后一个元素作为扩展名。

示例代码如下:

<?php
$filePath = 'test/document.tar.gz';
// 用点号分割路径字符串
$parts = explode('.', $filePath);
// 取最后一个元素作为扩展名
$extension = end($parts);
echo $extension; // 输出 gz

// 如果文件没有点号,end会返回整个文件名,需要做判断
$filePath2 = 'test/readme';
$parts2 = explode('.', $filePath2);
$extension2 = count($parts2) > 1 ? end($parts2) : '';
echo $extension2; // 输出 空字符串
?>

这种方式的缺点是如果文件名中有多个点号,会直接取最后一个点号后的内容,对于类似tar.gz这种复合扩展名,只能获取到gz,如果需要保留完整的复合扩展名,这种方式就不太适用。

使用strrchr函数查找最后一个点号

strrchr函数可以查找字符串中最后一次出现指定字符的位置,并返回该位置之后的所有字符,我们可以用它找到最后一个点号,再截取点号后的内容作为扩展名。

示例代码如下:

<?php
$filePath = 'test/avatar.png';
// 查找最后一个点号的位置并返回之后的内容
$extPart = strrchr($filePath, '.');
// 去掉点号得到扩展名
$extension = $extPart ? substr($extPart, 1) : '';
echo $extension; // 输出 png

// 处理没有扩展名的情况
$filePath2 = 'test/config';
$extPart2 = strrchr($filePath2, '.');
$extension2 = $extPart2 ? substr($extPart2, 1) : '';
echo $extension2; // 输出 空字符串
?>

这种方式的实现逻辑和pathinfo类似,但是需要手动处理截取逻辑,代码量比直接使用pathinfo要多一些,不过也能正确应对大部分场景。

扩展名判断的注意事项

获取到扩展名之后,判断时需要注意以下几点:

  • 扩展名的大小写问题,比如JPGjpg属于同一种扩展名,判断时可以先统一转为小写再比较。
  • 不要仅依赖扩展名判断文件类型,因为扩展名可以被伪造,重要场景下需要结合文件内容校验,比如读取文件头信息判断真实类型。
  • 如果处理用户上传的文件,建议同时校验MIME类型,提升文件校验的安全性。

下面是统一转为小写判断扩展名的示例:

<?php
$filePath = 'test/photo.JPG';
$extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
// 判断是否为图片扩展名
$allowExts = ['jpg', 'png', 'gif', 'jpeg'];
if (in_array($extension, $allowExts)) {
    echo '是允许的图片类型';
} else {
    echo '不允许的文件类型';
}
?>

PHP文件扩展名pathinfoexplodestrrchr修改时间:2026-06-27 15:15:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。