Как заставить класс загрузки файла CodeIgniter принимать все расширения? - PullRequest
21 голосов
/ 09 июня 2009

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

Ответы [ 8 ]

62 голосов
/ 04 мая 2011

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

$config['allowed_types'] = '*';
4 голосов
/ 22 апреля 2010

Что я делаю, это:

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

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

4 голосов
/ 09 июня 2009

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

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

В качестве дополнительного бонуса 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
    }
}

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

2 голосов
/ 09 июня 2009

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

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

1 голос
/ 06 августа 2016

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

0 голосов
/ 08 февраля 2019

$config['allowed_types'] = '*'; возможно решение, но ИМХО это не очень безопасно. Лучший способ - добавить типы файлов, которые вам нужны, в $ config ['разрешенные_типы'] . Если у CodeIgniter нет нужных вам типов MIME, вы можете добавить их, отредактировав файл mimes.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 ['allow_types'] переменную.

0 голосов
/ 10 февраля 2018

если все не работает, измените порядок разрешенных типов таким же образом в первом видеоформате

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

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

0 голосов
/ 23 августа 2010

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

        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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...