在 Codeigniter 中上传 - 不允许使用您尝试上传的文件类型

2022-08-31 00:31:56

我收到错误:当我尝试上传任何文件时,您尝试上传的文件类型是不允许的。

if(!empty($_FILES['proof_of_purchase']['name'])) {
    $config['upload_path'] = './uploads/invoices/';
    $config['allowed_types'] = 'gif|jpg|jpeg|png|pdf|bmp';
    $config['max_size'] = '3000';
    $this->load->library('upload', $config);
  
      // if there was an error, return and display it
    if (!$this->upload->do_upload('proof_of_purchase'))
    {
        $data['error'] = $this->upload->display_errors();
        $data['include'] = 'pages/classic-register';
    } else {
        $data['upload_data'] = $this->upload->data();
        $filename = $data['upload_data']['file_name'];
    }
}

我尝试了许多不同的文件 - 主要是gif和jpeg,每次都得到相同的错误。

var_dump(_FILES美元);给我:

array(1) { ["proof_of_purchase"]=> array(5) { ["name"]=> string(28) "2010-12-04_00019.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(19) "D:\temp\php2BAE.tmp" ["error"]=> int(0) ["size"]=> int(58054) } } 

我已经检查了哑剧配置,它包含正确的东西。例:

'jpeg'  =>  array('image/jpeg', 'image/pjpeg'),
'jpg'   =>  array('image/jpeg', 'image/pjpeg'),
'jpe'   =>  array('image/jpeg', 'image/pjpeg'),

答案 1

如果您使用的是 Codeigniter 版本 2.1.0,则上传库中存在错误。有关更多详细信息,请参阅 http://codeigniter.com/forums/viewthread/204725/

基本上,我所做的是修改文件上传类中的几行代码(位置:./system/libraries/Upload.php)

1) 修改行号 1044

从:

$this->file_type = @mime_content_type($file['tmp_name']);
return;

对此:

$this->file_type = @mime_content_type($file['tmp_name']);
if (strlen($this->file_type) > 0) return; 

2) 修改行号 1058

从:

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_path']), $output, $return_code);

对此:

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_name']), $output, $return_code); 

如您所见,第 1058 行尝试使用不存在的数组值。


答案 2

我在CI上遇到了同样的问题,并且无法在论坛或通过Google找到修复程序。我所做的是允许所有文件类型,以便上传文件。然后,我手动处理逻辑以确定是允许/保留文件,还是删除它并告诉用户不允许使用文件类型。

$config['upload_path'] = './uploads/invoices/';
$config['allowed_types'] = '*'; // add the asterisk instead of extensions
$config['max_size'] = '3000';
$this->load->library('upload', $config);

if (!$this->upload->do_upload('proof_of_purchase'))
{
    $data['error'] = $this->upload->display_errors();
    $data['include'] = 'pages/classic-register';
} else {
    $data['upload_data'] = $this->upload->data();
    // use custom function to determine if filetype is allowed
    if (allow_file_type($data['upload_data']['file_ext'])) 
    {
        $filename = $data['upload_data']['file_name'];
    }
    else
    {
        show_error('File type is not allowed!');
    }
}

编辑 - 这是假设您使用的是 CI 2(在 CI 1 中,您可以按照此处的教程允许所有文件类型:http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/)


推荐