You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP自定义getExtension函数获取上传文件扩展名返回.file问题求解

解决建议

你当前贴出的代码首先存在语法错误:函数未补全结束的},先修正语法问题后,可按以下步骤排查修复:

// 补全基础错误且增加异常判断的函数示例
function getExtension($file){
    // 优先判断上传是否成功,避免后续逻辑报错
    if (!isset($_FILES[$file]) || $_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
        return '';
    }
    $fileName  = $_FILES[$file]['name'];
    $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
    return $extension;
}
  • 检查前端上传表单是否添加了enctype="multipart/form-data"属性,缺少该属性会导致文件上传时的参数解析异常,出现文件名后缀被改写的问题。
  • 先直接打印$_FILES[$file]['name']的原始值,确认客户端传递的文件名本身是否带有.pdf后缀,部分浏览器安全插件、自定义上传逻辑或者客户端安全软件可能会篡改原始文件名,将后缀替换为.file。
  • 不要完全依赖客户端传递的文件名判断格式,可靠性和安全性更高的方式是读取文件本身的头信息判断真实格式,示例代码如下:
    // 基于文件内容判断真实后缀
    function getRealExtension($tmpFilePath) {
        $finfo = new Finfo(FILEINFO_MIME_TYPE);
        $mime = $finfo->file($tmpFilePath);
        $mimeMap = [
            'application/pdf' => 'pdf',
            'image/jpeg' => 'jpg',
            'image/png' => 'png'
            // 可根据需求补充其他格式映射
        ];
        return $mimeMap[$mime] ?? '';
    }
    // 调用示例:getRealExtension($_FILES[$file]['tmp_name'])
    
  • 检查PHP配置的upload_tmp_dir临时目录读写权限是否正常,权限不足会导致上传文件解析异常,出现文件名读取错误。
  • 排查项目中是否存在全局上传预处理逻辑、框架中间件改写了$_FILES全局变量的内容,部分安全组件会默认将未知格式文件的后缀修改为.file避免安全风险。

内容的提问来源于stack exchange,提问作者António Miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 17:06:04