您在codeigniter中不允许尝试上传的文件类型

时间:2017-09-10 06:44:48

标签: php codeigniter upload

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'txt';
$config['max_size'] = '10000';
$this->load->library('upload', $config);
if(!$this->upload->do_upload('datafile')){
    print_r($this->upload->display_errors());  
}else{
      // rest of work
 }

一切正常但是当它尝试上传包含char开始新行的文本文件时(例如:charlie@mail.com),它会显示以下错误: The filetype you are attempting to upload is not allowed.

是否与任何xss过滤器冲突?也许不是,因为我尝试过从system/libraries/Upload.php

删除xss过滤器功能

但是var_dump($_FILES);表明它是正确的mime类型文件。

Codeigniter版本3.0.3

增加:

获取全局文件类型设置时:

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

有效。但这不是解决方案。它是否与mime类型过滤冲突?

2 个答案:

答案 0 :(得分:0)

GitHub issues中所述,您可以解决此问题。 以下两个可能与此相关的主题(GitHubPHP),我无法理解这种行为的真实性质。虽然我找到了两种可能的解决方案:

1。)在APPPATH . 'config/mimes.php'

中扩展txt扩展名的mime类型
'txt'   =>      ['text/plain', 'text/x-c'],

2。)使用vanilla PHP upload code允许我上传这样的文件而不更新默认的mimes.php文件。

答案 1 :(得分:0)

问题原因

narfbg检测到包含char的文件的mime-type返回开始新行与普通文本文件mime类型不同。

char是C变量类型。因此,在上传文件时,服务器返回它是text/x-c mime类型文件。它还与floatdouble冲突。这些也是C变量类型。

解决方案:

我找到了两个解决方案:

1)上传没有mime检测的文件:

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

然后检查文件扩展名。如果是.txt文件,则处理:

$file_extension = $uploadData['file_ext'];
if($file_extension == ".txt"){
   //process
 }

2)'text/x-c'扩展名application/config/mimes.php'中添加.txt mime类型:

'txt' => array('text/plain', 'text/x-c')