如何使CodeIgniter文件上传类接受所有扩展?

时间:2009-06-09 04:51:30

标签: php codeigniter

目前,如果我没有为该类提供扩展,则它不允许扩展。我想允许所有扩展。有没有办法在不破坏核心的情况下做到这一点?

8 个答案:

答案 0 :(得分:62)

在Codeigniter 2中,您只需要定义允许的类型,如下所示:

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

答案 1 :(得分:4)

你的直接问题的答案:不,没有覆盖核心就没有办法做到这一点

好消息是你可以避免攻击核心,per the manual

  

作为额外的奖励,CodeIgniter允许您的库扩展   本机类,如果您只需要添加一些功能   现有的图书馆。或者您甚至可以只替换本机库   将相同名称的版本放在application / libraries文件夹中。

因此,要替换您的库,您可以将Upload.php复制到您的

application/libraries

文件夹,然后将自定义逻辑添加到该Upload.php文件中。无论何时加载上传库,Code Igniter都会包含此文件。

或者,您可以创建扩展原始的OWN自定义上载器类,并仅优化is_allowed_filetype函数。

application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload{
    function is_allowed_filetype(){
         //my custom code here
    }
}

每当升级时,您都希望阅读the changelog,但这样您就可以将代码和核心代码保存在不同的Universe中。

答案 2 :(得分:4)

我的工作是:

$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;

这使得每个函数调用中的所有文件都被自动允许。

答案 3 :(得分:2)

到目前为止看起来它只能通过黑客攻击。

我在system / libraries / Upload.php。

的第556行插入return true

答案 4 :(得分:1)

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>  哪个将上传任何文件格式,如.exe或.jpegs extra ...

答案 5 :(得分:0)

您只需要替换此条件:

        if (! $this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

使用:

        if (count($this->allowed_types) && !$this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

答案 6 :(得分:0)

如果一切无效,则重新排列允许的类型顺序,如第一种视频格式

$config['allowed_types'] = 'mp4|jpg|png|'

它将适用于我的情况,所以我尽可能分享尝试。

答案 7 :(得分:0)

$config['allowed_types'] = '*';是可能的解决方案,但是恕我直言,它不是很安全。更好的方法是将所需的文件类型添加到 $ config ['allowed_types'] 中。如果CodeIgniter没有所需的MIME类型,则可以通过在“ application / config”文件夹中编辑文件 mimes.php 来添加它们。只需将mime类型包括在数组中即可。

添加epub和fb2文件类型的示例:

return array(
'epub'  =>  'application/epub+zip',
'fb2'   =>  'application/x-fictionbook+xml',
'hqx'   =>  array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),

然后,您将能够使用在 $ config ['allowed_types'] 变量中添加的扩展名。