解决CodeIgniter部分文件无法上传问题

CodeIgniter 是一套小巧但功能强大的、给 PHP 网站开发者使用的 Web 应用程序开发框架和工具包。

问题

CodeIgniter 官方封装好了上传类,非常方便,但在实际使用中会遇到一些问题,发现部分文件无法上传,提示“The filetype you are attempting to upload is not allowed.”错误。

情况一:无法上传.webp的图片

CodeIgniter 上传类通过allowed_types 来指定允许文件的MIME文件类型,即使已经指定了.webp 格式的图片,但仍然无法上传。发现CodeIgniter的MIME类型中根本不支持.webp

打开application/config/mimes.php在数组里面追加一行:

'webp'    =>    'image/webp'

最终问题得以解决,如果其它后缀也有这个情况,也可以按照这个方法来增加指定后缀和MIME类型。

情况二:已经允许多个图片MIME类型,但图片仍然无法上传

比如xiaoz已经参数中指定以下图片可以上传:

$config['allowed_types']    = 'gif|jpg|jpeg|png|bmp|webp';

但某些时候发现一张普通的.jpg格式上传仍然会报“The filetype you are attempting to upload is not allowed.”错误。最后发现原因是后缀名和实际的MIME类型不一致导致,也就是说这张.jpg格式的图片MIME类型可能是image/png (.png)

CodeIgniter会获取文件的后缀和MIME类型,然后进行匹配,如果不一致就会导致上传失败,解决办法就是修改application/config/mimes.phpjpg这一行增加多个MIME类型。

'jpg'    =>    array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif', 'image/bmp', 'image/x-ms-bmp'),

另一种解决办法

还有一种办法就是先允许所有类型的文件上传

$config['allowed_types']    = '*';

然后再对文件的MIME类型进行判断,如果是不允许的MIME类型将其删除,同时返回错误。

CodeIgniter上传类说明可参考:文件上传类

标签: CI

发表评论: