25

Currently if I supply no extensions to the class it allows no extensions. I would like to allow all extensions. Is there any way to do this without hacking the core?

8 Answers 8

68

In Codeigniter 2, you simply need to define allowed types like this :

$config['allowed_types'] = '*';
Sign up to request clarification or add additional context in comments.

1 Comment

Works in CodeIgniter 3 as well
4

What I do is:

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

That makes all files in every function call automatically allowed.

Comments

4

The answer to your direct question: No, there's no way to do this without overriding the core

To good news is you can avoid hacking the core, per the manual

As an added bonus, CodeIgniter permits your libraries to extend native classes if you simply need to add some functionality to an existing library. Or you can even replace native libraries just by placing identically named versions in your application/libraries folder.

So, to have a drop in replacement for your library, you could copy Upload.php to your

application/libraries

folder, and then add your custom logic to that Upload.php file. Code Igniter will include this file instead whenever you load the upload library.

Alternately, you could create your OWN custom uploader class that extends the original, and only refines the is_allowed_filetype function.

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

You'll want to read over the changelog whenever you're upgrading, but this will allow you to keep your code and the core code in separate universes.

1 Comment

How's magento coding going Alan?
2

So far it looks like it would only be possible via a hack.

I inserted a return true on line 556 in system/libraries/Upload.php.

1 Comment

I prefer making a custom library over editing the system/libraries/ folder. Updating to a new version on CI usually means replacing the old system/ folder (except system/application/) with the latest version. CMIIW
1

$config['allowed_types'] = '*'; Which Will Upload Any File Formats Like .exe or .jpegs extra...

Comments

1

if all not works then rearrange the allowed type order like that in first video format

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

It will works in my case so I shared if possible try it.

Comments

0

You simply need to replace this condition:

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

With:

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

Comments

0

$config['allowed_types'] = '*'; is possible solution, but IMHO it is not very safe. The better way is to add a file types you need to $config['allowed_types']. In case the CodeIgniter doesn't have the MIME types you need, you can add them by editing file mimes.php in "application/config" folder. Just include your mime types in array.

Example of adding epub and fb2 file types:

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'),

Then you'll be able to use the extensions you added in $config['allowed_types'] variable.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.