2012-02-26 24 views
9

Im tratando de determinar el tipo MIME de un archivo subido, quiero usar fileinfo(), esto es lo que he estado tratando, que no está funcionando:Finfo_file el archivo cargado para determinar tipo MIME

$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); 

Desafortunadamente, el finfo_file no parece estar ejecutándose, supongo que tengo el siguiente $file configurado incorrectamente para esto, ¿hay alguna manera de hacerlo correctamente con un archivo recién subido utilizando $_FILE de esta manera? o voy a este problema de una manera completamente incorrecta. Usar un archivo que he preestablecido en otro directamente, y la configuración $file="folder/file.doc" funciona correctamente.

Respuesta

18

Debería estar pasando la ruta a la función finfo_file no al nombre del archivo.

<?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

En su archivo php.ini, asegúrese de tener esta entrada: extension = fileinfo.so o en windows: php_fileinfo.dll – metamagicson

-1

Sé que esto es un poco viejo, pero ya que está utilizando el $_FILES súper mundial, se puede utilizar el tipo clave del archivo de la matriz (es decir $_FILES['soup']['type']) en lugar de tener el cheque una vez que el servidor archivo está cargado?

+3

El uso de los parámetros de la matriz $ _FILES para verificar el tipo de archivo es spoof-able. Es por eso que se creó finfo_file para que podamos verificar el binario del archivo para determinar si realmente es un archivo de imagen y no un archivo php con su extensión de archivo renombrada a jpg, en cuyo caso el tipo de matriz $ _FILES dar jpg. – jessiPP

0

utilizo la función finfo()buffer(), así como file_get_contents() desde la plataforma PHP de la siguiente manera

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

que necesita para estar en php 5.3 o superior y asegúrese de que tiene instalada la extensión finfo(). para linux extension=fileinfo. y en las ventanas: php_fileinfo.dll

se puede tener una gran variedad de tipos MIME aceptados y después comprobar si existe en esa matriz

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

Otra alternativa para evitar tener que comprobar tipos MIME sería la de almacenar la carga de archivos completamente fuera de la carpeta raíz del documento.

Cuestiones relacionadas