CodeIgniter: «Тип файла, который вы пытаетесь загрузить, не разрешен».

Я испытываю очень странную проблему с загрузкой. Вот соответствующий файл вида:

<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data"> <fieldset> <input type="file" name="userfile"/> <input type="submit" value="Upload"/> </fieldset> </form> 

И вот мой метод upload() моего контроллера temp :

 public function upload() { $config['upload_path'] = FCPATH . 'uploads' . DIRECTORY_SEPARATOR; assert(file_exists($config['upload_path']) === TRUE); $config['allowed_types'] = 'avi|mpg|mpeg|wmv|jpg'; $config['max_size'] = '0'; $this->load->library('upload', $config); if ($this->upload->do_upload('userfile') === FALSE) { // Some error occured var_dump($this->upload->display_errors('', '')); var_dump($_FILES); } else { // Upload successful var_dump($this->upload->data()); } } 

Когда я загружаю видео AVI, все работает нормально. Когда я загружаю, скажем, WMV-видео, я получаю следующие свалки вар:

 string 'The filetype you are attempting to upload is not allowed.' (length=57) array 'userfile' => array 'name' => string 'wmv.wmv' (length=7) 'type' => string 'video/x-ms-wmv' (length=14) 'tmp_name' => string 'C:\wamp\tmp\php2333.tmp' (length=23) 'error' => int 0 'size' => int 83914 

Расширение «wmv» интерпретируется как тип MIME: video/x-ms-wmv . Это должно быть хорошо, так как моя config / mimes.php имеет следующее:

 'wmv' => array('video/x-ms-wmv', 'audio/x-ms-wmv') 

Это аналогичная ситуация, когда я пытаюсь загрузить другие файлы. Пока что единственный, который, похоже, работает, – это тестовое видео AVI.

Какие-нибудь идеи, что может быть неправильным?

ОБНОВЛЕНИЕ 1:

Одна моя машина, загружает только AVI. На другой машине разработчика загрузка файлов отсутствует. На машине другого разработчика загружаются все поддерживаемые файлы. Являются ли эти проблемы браузером или сервером?

Вы используете Firefox, не так ли?

Вы можете попытаться посмотреть на system/libraries/Upload.php строку system/libraries/Upload.php 199:

 $this->_file_mime_type($_FILES[$field]); 

Измените эту строку на:

 $this->_file_mime_type($_FILES[$field]); var_dump($this->file_type); die(); 

Затем загрузите файл .wmv . Он будет показывать что-то вроде application/octet-stream или что-то еще. Добавьте это к вашему mimes.php . Надеюсь эта помощь =)

Подобный ответ здесь

Некоторые ссылки:

  • Тема форума CodeIgniter
  • Повреждение Mimetype в Firefox
  • Обход MIME-типа IE

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

  1. Загрузите файл .wmv на сервер с помощью FTP / SFTP / scp / etc, где вы запускаете приложение CodeIgniter
  2. На сервере, на котором вы загрузили файл .wmv, выполните следующий код PHP

     <?php $file_path = 'CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv'; $finfo = finfo_open(FILEINFO_MIME); $mime = finfo_file($finfo, $file_path); var_dump($mime); ?> 
  3. Сохраните код как mime.php

  4. Запуск в терминале – $ php mime.php
  5. Если он выгружает любое другое значение, чем у вас уже есть для wmv, добавьте это значение в типы mm wmv.

Также проверьте PHP_VERSION на других машинах разработки. finfo_open представлен в PHP 5.3. У машины разработки, где работает загрузка, может быть установлена ​​более старая версия PHP или она может иметь правильный тип mime для wmv.

Недавно у меня были некоторые очень похожие проблемы с классом загрузки Codeigniter.

* Allowed_types *, похоже, не работает. Например, я хотел разрешить загрузку изображений .PNG, но это не позволило бы им пройти через свой фильтр. Я закончил расследование этого дальше. Я разрешил временно загружать все типы файлов, я загрузил .PNG, а затем выгрузил данные для загрузки ( $ this-> upload-> data ()); ). По какой-то причине он думал, что тип MIME был текстовым / простым ! Это может быть связано с вашей проблемой.

Есть некоторые решения для этого, я нашел серфинг на некоторых форумах, где вы можете изменить / расширить класс или ядро, но они не сработали для меня – извините. Я считаю, что это ошибка Codeigniter Core (я думаю, что эта проблема уже была открыта с помощью EllisLabs). В конце концов, я все равно жестко кодировал эту чертову вещь! Надеюсь, это поможет вам.

Основной пример / обход,

 //replace with your allowed MIME types if ($_FILES['name_of_form_upload']['type'] != 'image/jpeg' && $_FILES['name_of_form_upload']['type'] != 'image/png' && $_FILES['name_of_form_upload']['type'] != 'image/gif') { $data['message'] = '<div class="message">That file type is not allowed!</div>'; $this->load->view('home_view', $data); } else { //run upload code } 

Изменить: форматирование / грамматика

вы пытались использовать типы mime вместо расширений в $ config ['allowed_types']?

напиши это так

 $config["allowed_types"] = "video/x-msvideo|image/jpeg|video/mpeg|video/x-ms-wmv"; 

Это на самом деле ошибка в ядре. Я обновил до последней версии CI, и ошибка исчезла.

Ответ для загрузки файла .doc в CodeIgniter

Изменить это

 'doc' => 'application/msword', 

При этом на линии № 95 (файл application/config/mimes.php )

 'doc' => array('application/vnd.ms-word','application/msword'), 

если вам нужен простой способ решить это, для него есть простое решение. открыть файл «system / libraries / Upload.php»

 line no 465 you will see if ( ! $this->is_allowed_filetype()) { $this->set_error('upload_invalid_filetype', 'debug'); return FALSE; } just make it true if ( ! $this->is_allowed_filetype()) { $this->set_error('upload_invalid_filetype', 'debug'); return TRUE; } note : it will stop your all file type validation. 

Изменить IN application \ config \ Mimes.php