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

CodeIgniter 3.1.7无法上传msg文件,求排查原因

解决CodeIgniter 3.1.7上传.msg文件提示类型不允许的问题

我之前在使用CI3上传特殊文件时也踩过类似的坑,结合你给出的配置和报错信息,大概率是这几个原因导致的,一个个排查试试:

  • 实际检测的MIME类型不在配置列表里
    CI3的上传类默认启用detect_mime(默认值为true),它会优先用finfo扩展检测文件的真实MIME类型,而非只依赖$_FILES返回的application/octet-stream。有可能你的.msg文件真实MIME是另一个值(比如application/x-msg),而这个值没加到mimes.php的msg对应数组里。
    你可以临时加一段代码打印真实检测结果:

    $finfo = new Finfo(FILEINFO_MIME_TYPE);
    echo $finfo->file($_FILES['your_upload_field_name']['tmp_name']);
    exit;
    

    把输出的MIME类型添加到mimes.php的'msg'数组里即可。

  • 修改的mimes.php文件不对或被缓存
    确认你修改的是application/config/mimes.php(应用目录下的文件),而非系统目录system/application/config/mimes.php里的文件。另外如果服务器开启了OPcache,可能缓存了旧的配置内容,重启Web服务器或清除OPcache缓存再试试。

  • 文件扩展名大小写不匹配
    如果用户上传的文件是.MSG大写扩展名,而你allowed_types里写的是小写msg,且$config['file_ext_tolower']是默认的false,CI会认为扩展名不匹配。你可以把allowed_types改成msg|MSG,或者设置$config['file_ext_tolower'] = true,让系统自动把扩展名转小写后再匹配。

  • 服务器环境限制导致MIME检测异常
    有些服务器可能禁用了finfo扩展,或者会篡改上传文件的MIME类型。你可以先检查phpinfo()里是否有finfo扩展的信息,如果没有,CI会回退到使用$_FILES里的MIME值,这时候要确保这个值在你配置的msg对应MIME数组里。另外也可以临时关闭detect_mime(仅用于测试,生产环境别用,有安全风险)来验证:

    $config['detect_mime'] = false;
    

    如果关闭后能上传成功,就说明是MIME检测的问题,回到第一个点排查真实MIME值。

内容的提问来源于stack exchange,提问作者jtheman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:47