PHP获取文件扩展名
时间:2026-10-21 07:01 作者:emer 分类: 无
PHP获取文件扩展名
引言
文件上传、附件处理、图片裁剪时都要先拿到后缀判断类型。别用explode切字符串硬切,pathinfo是PHP专门解析路径的函数,能干净返回扩展名、文件名、目录名各部分。
pathinfo 标准用法
$file = '/var/www/upload/photo.2024.jpg';
$info = pathinfo($file);
echo $info['extension']; // jpg
echo $info['filename']; // photo.2024
echo $info['dirname']; // /var/www/upload
一次返回路径各组成部分,最稳妥。
只取扩展名
$ext = pathinfo($file, PATHINFO_EXTENSION);
// jpg
传第二个常量直接拿扩展名,省一次数组取值。
处理无扩展名文件
$ext = pathinfo('README', PATHINFO_EXTENSION);
// 空字符串,不会报错
没扩展名时返回空串,记得做空判断。
大写转小写统一
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
用户传JPG、Jpg、jpg都归一,上传校验用统一小写比较。
不要用explode硬切
// 反面例子:photo.2024.jpg 会切错
$parts = explode('.', $file);
$ext = end($parts);
多级点号文件名会取错,pathinfo按最后一个点正确取后缀。
注意事项
- 扩展名不等于真实MIME类型,校验文件内容要用finfo;
- 扩展名可伪造,上传安全不能只信后缀;
- PATHINFO_EXTENSION对".htaccess"这种点开头文件返回空;
- 中文文件名不受影响,pathinfo按字节正确处理;
- 取到扩展名后trim并strtolower再做白名单校验;
- 别把扩展名当安全依据,配合大小限制和重命名存储。
总结
pathinfo($file, PATHINFO_EXTENSION)取扩展名最稳,filename拿文件名、dirname拿目录,无扩展名返回空串记得判断,业务里统一strtolower小写。不要用explode切多级点号文件名。扩展名只是展示用,真实类型靠finfo判断,上传安全还需白名单加文件内容校验和重命名存储。