iPhone 用户在前台投稿,选相机原图上传,红色提示 Sorry, you are not allowed to upload this file type。同一张照片导出成 JPG 就能传,文件 3.4MB 没超限制。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_filter('upload_mimes', function ($m) {
    $m['heic'] = 'image/heic';
    $m['heif'] = 'image/heif';
    return $m;
});

服务端允许列表里没有 heic,PHP 的 fileinfo 又把这个容器识别成 application/octet-stream。类型判断落到兜底分支,直接被拒。这一点先确认清楚,后面就不用反复试。

「HEIC 上传不支持」这类改动最怕改一半,回滚脚本先准备好,再动生产。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

具体做法是,在 upload_mimes 里补上 heic 和 heif 两种后缀;不要只信扩展名 用 Imagick 读真实格式再放行;放行后统一转成 JPEG 落盘 避免前台浏览器不支持。

改完照着核一遍,iPhone 直接选原图能上传,媒体库里显示为转好的 JPEG,前台正常显示。

作者 9823189