代码之家  ›  专栏  ›  技术社区  ›  Ali

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

  •  21
  • Ali  · 技术社区  · 16 年前

    目前,如果我不提供类的扩展,它就不允许扩展。我想允许所有的扩展。有没有什么方法可以做到这一点而不黑客核心?

    8 回复  |  直到 6 年前
        1
  •  62
  •   Baris    14 年前

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

    $config['allowed_types'] = '*';
    
        2
  •  4
  •   Adam    15 年前

    我所做的是:

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

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

        3
  •  4
  •   Mark Eirich    14 年前

    你的直接问题的答案是:不,如果不超越核心,就没有办法做到这一点。

    好消息是你可以避免黑客的核心, per the manual

    作为额外的好处,codeigner允许您的库扩展 如果只需要向 现有的库。或者甚至可以替换本机库 通过在应用程序/库文件夹中放置同名版本。

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

    application/libraries
    

    文件夹,然后将自定义逻辑添加到upload.php文件中。每当加载上载库时,代码点火器将包含此文件。

    或者,您可以创建自己的自定义上载程序类来扩展原始文件,并且只优化is_allowed_filetype函数。

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

    你会想读完的 the changelog 无论何时升级,这将允许您将代码和核心代码保存在不同的世界中。

        4
  •  2
  •   Ali    16 年前

    到目前为止,这似乎只有通过黑客才能实现。

    我插入了一个 return true 在system/libraries/upload.php中的第556行。

        5
  •  1
  •   Shafeer khan    8 年前

    $config['allowed_types'] = '*'; 它将上载任何文件格式,如.exe或.jpegs-extra…

        6
  •  0
  •   Sarfraz    14 年前

    您只需替换此条件:

            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;
            }
    
        7
  •  0
  •   slfan Narendra    7 年前

    如果全部不起作用,则像第一个视频格式那样重新排列允许的类型顺序

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

    它会在我的情况下工作,所以我分享,如果可能的话,试试看。

        8
  •  0
  •   Wingpilot    6 年前

    $config['allowed_types'] = '*'; 是可能的解决办法,但不太安全。更好的方法是添加需要的文件类型 $config['允许的类型'] . 如果CodeIgniter没有您需要的mime类型,您可以通过编辑文件来添加它们。 PHP 在“application/config”文件夹中。只需在数组中包含您的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['允许的类型'] 变量。