在Codeigniter中上传

在Codeigniter中上传

本文介绍了在Codeigniter中上传 - 不允许您尝试上传的文件类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  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(!$ 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)}} 



我检查了mime配置,它包含正确的东西。示例:

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

长在这,它的驱动我坚果!任何想法都会非常有帮助。

解决方案

如果您使用Codeigniter版本2.1.0, 。有关详情,请参见。



基本上,我做的是修改文件上传类中的几行代码(位置:./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



from:

  @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尝试使用不存在的数组值。 p>

I am getting the error: The filetype you are attempting to upload is not allowed when I try to uplaod any file.

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'];
    }
}

I have tried many different files- mostly gif & jpeg and get the same error each time.

var_dump($_FILES); gives me:

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) } }

I have checked the mime config and it contains the right stuff. Example:

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

I've spent far too long on this and it's driving me nuts! Any ideas would be extremely helpful.

解决方案

If you're using Codeigniter version 2.1.0 there is a bug in the Upload library. See http://codeigniter.com/forums/viewthread/204725/ for more details.

Basically what I did was modify a few lines of code in the File Upload Class (Location: ./system/libraries/Upload.php)

1) modify Line number 1044

from:

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

to this:

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

2) modify line number 1058

from:

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

to this:

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

As you can probably see, line 1058 tries to use an array value that does not exist.

这篇关于在Codeigniter中上传 - 不允许您尝试上传的文件类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 00:38