php 为什么上传png文件就报错?

ilovelnmp
  • 307

layui前端上传
上传jpg就ok,只要上传png服务端就显示『The filetype you are attempting to upload is not allowed.』
服务端用的ci3 upload
`

public function upload()
{
    //var_dump($_FILES);
    $config['upload_path'] = '/home/wwwroot/abc/uploads/';
    $config['allowed_types'] = 'jpg|jpeg|png';
    $config['max_size'] = 10240;
    $config['max_width'] = 2048;
    $config['max_height']  = 1600;

    $this->load->library('upload', $config);

    if ( ! $this->upload->do_upload('file'))
    {
        echo $this->upload->display_errors();
    }
    else
    {
        header('content-type:application/json');
        echo ('{"code":"0","msg":"ok"}');
    }
}

`

回复
阅读 1.9k
5 个回答

这种问题,你直接找到报错的地方 dump 出当时的判断条件的内容,然后再逐一回溯就好了啊.

都看了,没发现问题上传jpg时 post信息是image/jpeg,上传png时是image/png
config/mimes.php 下这些格式都有

$config['allowed_types'] = 'jpg|jpeg|png';  //这样配置jpg行,png出错 


$config['allowed_types'] = '*';  //这样配置就全行,但是感觉安全性不好,更关键想知道为什么就png不行

ci3官方文档有说,若你在控制器内进行配置参数形式,需要在加载类库后,进行下述调用进行初始化
$this->upload->initialize()

而在config/mimes.php配置文件内进行配置则不需要上述调用。

你上传的png图片极有可能是webp格式的,对应的mime类型是image/webp,触发了上传文件配置中的类型不满足条件。试着改下这段代码:

$config['allowed_types'] = 'jpg|jpeg|png|webp';
Roader
  • 4
新手上路,请多包涵

上传图片的时候,打印看一下文件的mime类型,加到 allowed_type里面

宣传栏