2017-01-30 1 views
0

J'ai un formulaire qui devrait accepter le téléchargement de fichiers CVS. Je l'ai donc protégé par les éléments suivants:Avoir des problèmes avec la détection de type mime en php

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

Tous mes tests se sont bien passés sur mon environnement de développement, mais maintenant je trouve que, sur le client Windows, pour exactement le même fichier, je reçois un autre type mime.

C'est ce que je reçois lors de la connexion sur mon PC 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 

Et ce que je reçois en essayant de télécharger le même fichier à partir d'une machine 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 

Tout ideia pourquoi PHP détecte un type mime différent pour le même fichier? Et comment je peux résoudre ça?

+0

Le type MIME pourrait ne pas être « text/csv » certains systèmes de lecture/les enregistrer différemment. (Internet Explorers traite les fichiers .csv comme application/vnd.ms-excel) – Svekke

+0

Hi! Je teste le téléchargement avec le même fichier, et avec chrome dans les deux environnement, et dans Windows, $ _FILES ["fichier"] ["type"] est 'application/vnd.ms-excel'; Je suppose que je vais devoir utiliser une approche différente –

+0

Le client définit le type MIME. Vous n'avez aucun contrôle sur cela. – zeroflagL

Répondre

0

Vous pouvez prendre ce problème en procédant comme suit:

$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

Bien que vous ayez raison, je ne veux pas accepter les fichiers Excel. J'ai utilisé \t \t \t \t '$ finfo = finfo_open (FILEINFO_MIME_TYPE); $ MimeType = finfo_file ($ finfo, $ _FILES ["tariffLines"] ["tmp_name"]); \t \t \t \t finfo_close ($ finfo); ' pour forcer le système à vérifier le type mime. De cette façon, chaque fois que je reçois un type mime "texte/plaine" –