Проблема в том, что загрузить с помощью $CI->upload->do_upload(), файлы кроме $image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe'); не получится.
Итак, формируем свой
- Код: Выделить всё
...
$config['allowed_types'] = 'gif|jpg|png|mp3|txt';
...
$CI->load->library('upload', $config);
...
$res = $CI->upload->do_upload('f_userfile');
При загрузке, скажем txt-файла, вываливается ообщение «Вы пытаетесь загрузить запрещенный тип файла».
Проблема в неверной проверке типа в функции is_allowed_filetype() (файл libraries/Upload.php) вот в этом куске:
- Код: Выделить всё
$image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe');
foreach ($this->allowed_types as $val)
{
$mime = $this->mimes_types(strtolower($val));
// Images get some additional checks
if (in_array($val, $image_types))
{
if (getimagesize($this->file_temp) === FALSE)
{
return FALSE;
}
}
Блок if (in_array($val, $image_types)) ВСЕГДА возвращает FALSE для всех типов, кроме указанных в $image_types: $val - это значение из $this->allowed_types (то, которое в нашем $config). В нашем случае это «gif»(первый элемент). Есно, срабатывает условие «in_array($val, $image_types)» и идет проверка «getimagesize», которое естественно возвращает FALSE - мы же грузим, например txt-файл. А поскольку у нас FALSE, то дальнейший цикл прерывается с «return FALSE».
Исправляется путем указания расширения файла ПЕРЕД картиночными :
- Код: Выделить всё
$config['allowed_types'] = 'mp3|txt|gif|jpg|png';
Либо нафиг удалением:
- Код: Выделить всё
// Images get some additional checks
if (in_array($val, $image_types))
{
if (getimagesize($this->file_temp) === FALSE)
{
return FALSE;
}
}
