$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
但是var_dump($_FILES);
表明它是正确的mime
类型文件。
Codeigniter版本3.0.3
增加:
获取全局文件类型设置时:
$config['allowed_types'] = '*';
有效。但这不是解决方案。它是否与mime
类型过滤冲突?
答案 0 :(得分:0)
如GitHub issues中所述,您可以解决此问题。 以下两个可能与此相关的主题(GitHub,PHP),我无法理解这种行为的真实性质。虽然我找到了两种可能的解决方案:
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类型文件。它还与float
和double
冲突。这些也是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')