2012-02-26 7 views
9

Nel tentativo di determinare il mime-type di un file caricato, voglio usare FileInfo(), questo è ciò che Ive stato cercando, esso di lavoro isnt:Finfo_file sul file caricato per determinare mime-type

$uploadedfile = $_FILES['soup']['tmp_name']; 
if(isset($uploadedfile)) 
{ 
    $uploadedname = $_FILES['soup']['name']; 
    $file=$uploadedsong; 
    $file.=$uploadedname; 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file); 

Sfortunatamente il finfo_file non sembra essere in esecuzione, suppongo di avere il seguente $file impostato in modo errato per questo, c'è un modo per farlo correttamente con un file appena caricato usando $_FILE come questo? o sto andando a questo problema in modo completamente improprio. Usando un file ho pre-impostato in un altro direttamente, e l'impostazione $file="folder/file.doc" funziona correttamente.

risposta

18

Si dovrebbe passare il percorso alla funzione finfo_file e non al nome file.

<?php 
if (isset($_FILES['soup']['tmp_name'])) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']); 
    if ($mime == 'application/msword') { 
     //Its a doc format do something 
    } 
    finfo_close($finfo); 
} 
?> 
+0

nel file php.ini, assicuratevi di avere questa voce: extension = fileinfo.so o in finestre: php_fileinfo.dll – metamagicson

-1

So che questo è un po 'vecchio, ma dal momento che si sta utilizzando il $_FILES super-globale, si può utilizzare il tipo chiave della matrice del file (cioè $_FILES['soup']['type']) piuttosto che avere il controllo del server una volta che la il file è stato caricato?

+3

Utilizzando i parametri array $ _FILES per verificare il tipo di file è spoof-grado. Questo è il motivo per cui è stato creato finfo_file in modo che possiamo effettivamente controllare il file binario del file per determinare se si tratta in realtà di un file immagine e non di un file php con estensione del file rinominato in jpg, nel qual caso il tipo di array $ _FILES sarebbe dare jpg. – jessiPP

0

a utilizzare la funzione finfo()buffer() nonché file_get_contents() dalla piattaforma PHP come di seguito

$finfo = new finfo(FILEINFO_MIME); 
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type 

è necessario essere in php 5.3 o superiore e assicurarsi di avere installato l'estensione finfo(). per linux extension=fileinfo. e in Windows: php_fileinfo.dll

si può avere una vasta gamma di tipi MIME accettati e quindi verificare se esiste in tale matrice

$acceptedMime = []; 
if(in_array($mimetype, $acceptedMime, true) === true){ 
    #mime type is valid. Proceed! 
} 

Un'altra alternativa per evitare di dover controllare i tipi MIME potrebbe essere quella di memorizzare completamente il caricamento di file fuori dalla cartella radice del documento.

Problemi correlati