V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaoz
V2EX  ›  PHP

请教关于 CodeIgniter 上传类的问题

  •  1
     
  •   xiaoz · 2019-04-29 10:40:40 +08:00 · 3261 次点击
    这是一个创建于 1823 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 CodeIgniter 提供的上传类,设置允许的 MIME 类型为:

    #这样
    $config['allowed_types']    = 'gif|jpg|jpeg|png|bmp|webp';
    #也或者这样
    $config['allowed_types']    = 'image/jpeg|image/png|image/gif|image/bmp|image/x-ms-bmp|image/webp';
    

    换言之就是只允许图片进行上传,但是存在一个问题。CI 会根据文件的后缀名和 MIME 类型进行匹配,也就是说。

    1. 1.jpg本身 MIME 类型是image/jpeg,这样上传是没有问题的。
    2. 但是如果我将1.jpg修改为1.png,然后 CI 就会去获取后缀.png,但获取到的 MIME 类型仍然是image/jpeg,这就造成获取到的后缀和真实 MIME 类型不匹配。导致无法上传,提示错误“ The filetype you are attempting to upload is not allowed.”
    3. 感觉有点坑啊,直接验证 MIME 类型不就完了,非要后缀和 MIME 类型完全匹配

    请问大佬有遇到这种情况吗?如何解决?谢谢。

    11 条回复    2019-05-08 09:23:17 +08:00
    linauror
        1
    linauror  
       2019-04-29 11:11:48 +08:00   ❤️ 1
    改 config/mimes.php 针对于图片部分的配置,每个后缀多加几个 type 就行
    xiaoz
        2
    xiaoz  
    OP
       2019-04-29 11:29:48 +08:00 via Android
    @linauror 好的,谢谢,这个可行。还想到一个就是先允许所有文件上传,再判断 mime 类型,不是图片就删除。但感觉都不是很完美,不知道为什么 ci 没考虑到这个问题。
    linauror
        3
    linauror  
       2019-04-29 11:56:13 +08:00
    其实这个本来就是先把文件传上来的,一般在 tmp 目录下,然后再 move 的,后面检测失败的,tmp 目录会自动清除掉
    care
        4
    care  
       2019-04-29 12:35:01 +08:00 via iPhone
    我想知道 CodeIgniter 怎么配置 CDN 加速^_^
    xiaoz
        5
    xiaoz  
    OP
       2019-04-29 13:16:27 +08:00
    @care 配置 CDN 和 CodeIgniter 本身没什么关系吧。
    unicloud
        6
    unicloud  
       2019-04-29 14:30:21 +08:00 via iPhone
    你自己把.jpg 改成.png ,不能上传难道不是正常的吗?那要是能上传,那些危险脚本岂不是任意上传了?
    no1xsyzy
        7
    no1xsyzy  
       2019-04-29 14:59:30 +08:00
    @unicloud 其实同为图片后缀错的情况还不少见
    尤其一些缺筋图床,不管什么类型 URL 都是 .jpg ,MIME 都是 application/octet-stream ……
    我 IrfanView 打开就提示 “ This is a PNG file with a .jpg extension, rename?”
    但很多图片查看器是不管的。
    xiaoz
        8
    xiaoz  
    OP
       2019-04-29 15:05:54 +08:00
    @unicloud 因为设置了多个允许的 MIME 类型,.jpg/.png 的 MIME 类型包含在其中,虽然后缀不对,但 MIME 类型是存在的,个人觉得应该允许才对。
    care
        9
    care  
       2019-04-29 19:40:17 +08:00 via iPhone
    @xiaoz 我买了一个老外的基于 ci 框架的网站源码,然后想配置 cdn 加速,作者提供了一个国外的 cdn 服务商的配置示例: https://cdnsun.com/knowledgebase/integrations/codeigniter-cdn-integration 但是我根据此教程来配置七牛 cdn,根本不行。作者又不提供技术支持…
    xiaoz
        10
    xiaoz  
    OP
       2019-04-29 20:22:22 +08:00
    @care 七牛云支持镜像存储,我看了下他代码应该是可以实现图片等静态资源 CDN 加速的。或者用 nginx 的 subs_filter 模块替换也行。可以加我 QQ:337003006 可以收费帮您搞定。
    alex321
        11
    alex321  
       2019-05-08 09:23:17 +08:00
    其实就是扩展个 static_url() 方法,这个很基础啊。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1661 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:49 · PVG 00:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.