2017-01-30 17 views
0

У меня есть форма, которая должна принимать загрузку CVS-файлов. Так я защитил его со следующим:Проблемы с обнаружением типа mime в php

if (!in_array($mimeType, array("text/csv"))) throw new TMSException("Error"); 

Всех мои тесты прошли хорошо на моем Dev окружающей среды, но теперь я узнал, что на клиенте окон, для точно такого же файла, я получаю другой тип MIME.

Это то, что я получаю при подключении на моем Ubuntu ПК:

/var/www/ct/preinvoice.php:203: 
array (size=1) 
    'tariffLines' => 
    array (size=5) 
     'name' => string 'C&T - Labatut.csv' (length=17) 
     'type' => string 'text/csv' (length=8) 
     'tmp_name' => string '/tmp/php2vIcaE' (length=14) 
     'error' => int 0 
     'size' => int 3812 

И это то, что я получаю при попытке загрузить тот же файл с компьютера Windows:

/var/www/ct/preinvoice.php:203: 
array (size=1) 
    'tariffLines' => 
    array (size=5) 
     'name' => string 'C&T - Labatut.csv' (length=17) 
     'type' => string 'application/vnd.ms-excel' (length=24) 
     'tmp_name' => string '/tmp/phpPaMvN3' (length=14) 
     'error' => int 0 
     'size' => int 3812 

Любой Ideia почему PHP обнаруживает другой тип mime для того же файла? И как я могу это решить?

+0

Тип мим не может быть «текст/CSV» некоторые системы чтения/сохранить их по-разному. (Internet Explorers рассматривает файлы .csv как application/vnd.ms-excel) – Svekke

+0

Привет! Я тестирую загрузку с тем же файлом и с хромом как в среде, так и в окнах, $ _FILES ["file"] ["type"] является 'application/vnd.ms-excel'; Я предполагаю, что мне придется использовать другой подход –

+0

Клиент устанавливает тип MIME. Вы не контролируете его. – zeroflagL

ответ

0

Вы можете поймать эту проблему, выполнив следующие действия:

$mimetypes = array('application/vnd.ms-excel','text/csv'); 
if(in_array($_FILES['file']['type'],$mimetypes)){ 
    // do something 
} else { 
    die("MIME type is not allowed"); 
} 
+0

Хотя вы anwer правильно, я не хочу принимать файлы excel. Я использовал \t \t \t \t '$ finfo = finfo_open (FILEINFO_MIME_TYPE); \t \t \t \t $ mimeType = finfo_file ($ finfo, $ _FILES ["ratesLines"] ["tmp_name"]); \t \t \t \t finfo_close ($ finfo); ' , чтобы заставить систему проверить тип мим. Таким образом, каждый раз, когда я получаю «текстовый/простой» тип mime –

 Смежные вопросы

  • Нет связанных вопросов^_^