PHP获取文件扩展名pathinfo函数用法
时间:2026-11-14 07:19 作者:emer 分类: PHP
前言
上传文件、处理附件时需要取得文件扩展名来判断类型或重命名。pathinfo 是 PHP 获取路径信息的标准函数,一次返回目录、文件名、扩展名等多段,比自己写 explode 切字符串更可靠。本文讲解 pathinfo 基本用法、只取扩展名、大小写处理、配合上传校验。
操作步骤
1. 获取完整路径信息
$info = pathinfo('/var/www/upload/photo.jpg');
print_r($info);
返回 dirname、basename、extension、filename 等。
2. 只取扩展名
$ext = pathinfo('/var/www/photo.jpg', PATHINFO_EXTENSION);
echo $ext; // jpg
3. 获取不含扩展名的文件名
$name = pathinfo('photo.jpg', PATHINFO_FILENAME);
4. 小写化扩展名统一比较
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if ($ext === 'jpg' || $ext === 'png') { /* 允许 */ }
5. 处理带多个点的文件名
$ext = pathinfo('report.v2.pdf', PATHINFO_EXTENSION); // pdf
6. 结合上传字段
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
常见坑
- 自己用 explode('.') 切,文件名含多个点会取错。
- 扩展名大小写不一,.JPG 和 .jpg 比较失败,先 strtolower。
- 只信前端扩展名不安全,要校验 MIME 和文件头。
- 无扩展名文件 extension 返回空,要做空判断。
- 中文文件名在部分环境编码异常,注意字符集。
- PATHINFO_EXTENSION 只取最后一个点之后的部分。
- 虚拟路径带 query 参数时先去掉查询串。
总结
pathinfo 配 PATHINFO_EXTENSION 是取扩展名的标准方式,比手写切分稳健。统一小写比较,并且扩展名只作辅助,真正安全靠 MIME 和文件头校验。处理上传时先判空、再白名单比较,避免绕过。
遇到问题加QQ23979811 协助处理