Подтвердить что ты не робот

Как заставить класс загрузки файлов CodeIgniter принимать все расширения?

В настоящее время, если я не предлагаю расширений для класса, он не позволяет расширять. Я хотел бы разрешить все расширения. Есть ли способ сделать это без взлома ядра?

4b9b3361

Ответ 1

В Codeigniter 2 вам просто нужно определить допустимые типы, например:

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

Ответ 2

Ответ на ваш прямой вопрос: Нет, нет способа сделать это без переопределения ядра

К хорошей новостью можно избежать взлома ядра, за руководство

В качестве дополнительного бонуса CodeIgniter позволяет расширять ваши библиотеки родные классы, если вам просто нужно добавить некоторые функции для существующая библиотека. Или вы даже можете заменить родные библиотеки просто путем размещения идентично названных версий в папке вашего приложения/библиотек.

Итак, чтобы заменить вашу библиотеку, вы можете скопировать файл Upload.php на

application/libraries

а затем добавьте свою настраиваемую логику в этот файл Upload.php. Code Igniter будет включать этот файл, а не при загрузке библиотеки загрузки.

В качестве альтернативы вы можете создать свой собственный пользовательский класс загрузчика, который расширяет оригинал, и только уточняет функцию is_allowed_filetype.

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

Вы захотите прочитать журнал изменений при обновлении, но это позволит вам сохранить код и ядро кода в отдельных юниверсах.

Ответ 3

Что я делаю:

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

Это автоматически разрешает все файлы в каждом вызове функции.

Ответ 4

До сих пор похоже, что это возможно только через хак.

Я вставил return true в строку 556 в system/libraries/Upload.php.

Ответ 5

Вам просто нужно заменить это условие:

        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

$config['allowed_types'] = '*';  Что будет загружать любые форматы файлов, например .exe или .jpegs...