Como validar extensión de archivos

Estoy haciendo un upload de archivos para mi página y las formas que figuran en los foros no me anduvo ninguna para validar tipos de archivos,. Solo quiero que acepte RAR o ZIP,

1 Respuesta

Respuesta
1
La mejor opción es comparar por el mime type, ya que por la extensión es más vulnerable, ten en cuenta que un usuario podría cambiarla en cualquier momento y subir el tipo de archivo que quisiera.
Para hacerlo como tú comentas puedes hacerlo así:
<?php
    $numero_caracteres = 3; //los correspondientes a la extensión
    if(strtolower(substr($_FILES['name'], (strlen($_FILES['name'] - $numero_caracteres)), $numero_caracteres)) == 'zip' || strtolower(substr($_FILES['name'], (strlen($_FILES['name'] - $numero_caracteres)), $numero_caracteres)) == 'rar')
    {
        //tu código
    }
?>
Debes notar que primero tomamos los 3 últimos caracteres del nombre del archivo, correspondientes a la extensión, y después los ponemos en minúscula por si vienen en mayúsculas en el archivo.
Para hacerlo por mime type tienes dos formas:
Tomándolo del array $_FILES['type'] o utilizando la extensión file info.
Con el array $_FILES es igual que para la extensión, solo que en lugar de tomar los 3 últimos caracteres del 'name', tomamos el type entero y lo comparamos con su correspondiente mime type (application/x-rar-compressed, application/zip, etc), ten en cuenta que puede haber varios según la configuración del servidor.
Con finfo, sería también parecido, solo que en lugar de tomar el mime type del array $_FILES, lo tomaríamos de la siguiente manera:
<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // devuelve el tipo mime de su extensión
    $mimetype = finfo_file($finfo, $_FILES['tmp_name']); // con éste es con el que debes comparar
    finfo_close($finfo);
?>
Si no te queda muy claro, puedes poner tu código y lo repasamos, igual el fallo está en otro sitio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas