Obtener la extension de un archivo subido con php

En este post voy a explicar como comprobar las extensiones de una imagen con una simple función en php podremos sacar la extensión de un archivo, ya sea una imagen o cualquier tipo de documento, subido mediante un formulario en php.
Primero algo de teoría.
Para acceder a las propiedades del archivo o imagen php nos brinda el array $_FILES con las siguientes propiedades, en donde archivo es el nombre del campo con el cual se envió la imagen desde el formulario:

* $_FILES[‘archivo’][‘size’]: tamaño en bytes del archivo o imagen recibido
* $_FILES[‘archivo’][‘type’]: tipo mime del archivo, por ejemplo image/gif
* $_FILES[‘archivo’][‘name’]: nombre original del archivo
* $_FILES[‘archivo’][‘tmp_name’]: nombre del archivo temporal que se utiliza para almacenar en el servidor el archivo recibido

Ejemplo de un array

Array
(
    [file1] => Array
        (
            [name] => MyFile.txt
            [type] => text/plain 
            [tmp_name] => /tmp/php/php1h4j1o 
            [error] => 0
            [size] => 123   (el tamaño en bytes)
        )
)

Ahora conociendo un poquito más como funciona el array $_FILES podremos sacar muy fácilmente la extensión del archivo subido y por ejemplo comprobar que es una imagen .jpg, .jpeg, .png o .gif para nuestra galería de fotos o lo que sea. No permitiendo subir archivos .txt, .exe o cualquier otro archivo.


$this->obtenerExtensionFichero($_FILES['archivo']['name']);

function obtenerExtensionFichero($str) 
{
        return end(explode(".", $str));
}

12 opiniones en “Obtener la extension de un archivo subido con php”

  1. ahahhaahaha este sujeto solo uso un explode despues del punto ._.
    se ve que no saves nada de programacion facilmente tu codigo es bulnerable

    si subo una imagen con nombre caca y le pongo caca.jpg pero en realidad se trata de otro archivo con nombre caca.jpg estas frito

    NO sirve para comprovar que se trata de una imagen

    1. La función solo sirve para sacar la extensión de un archivo subido, imagen o lo que sea. No estoy explicando nada más en el artículo que no sea como obtener la extensión del fichero subido.

      Claro esta que si tu estas subiendo un archivo puta.php.jpg va a pensar que es una imagen, pero ya es cuestion de cada uno procesar el siguiente paso que es la subida y como se guarda el archivo subido.

      Yo no explico como subirlo y sobretodo como guardarlo, que aqui es donde te has pasado de listo. Y ahora te voy a explicar que es lo que hago. Lo más normal cuando tienes un formulario para que suban una imagen, es que la imagen se guarde en temporal. A partir de la imagen o supuesta imagen que te han subido, crear una imagen nueva, y está aqui el truco para dar seguridad a la aplicacion. Mediante las funciones imagecreatefromgif(), imagecreatefrompng() o imagecreatefromjpeg() y el resto de funciones relacionadas para crear imágenes se crea una imagen nueva a partir de la imagen subida y borrando la que el usuario ha subido. Así el código es seguro. Pero claro yo no he hablado nada de esto, simplemente mi artículo dice como sacar la extensión.

      1. No estas sacando la extension, estas sacando los ultimos 3 caracteres del nombre de un archivo. No la extension. Es necesario explicar bien para los que estan iniciando no se confundan.

  2. Mmmm a decir verdad, el código si sirve. Hice pruebas con un archivo llamado chat.chat (Es un .zip, su nombre completo es chat.chat.zip) y me devuelve “zip” y no devuelve “chat” como dice en un comentario.
    Gracias por el aporte 😉

  3. como puedo hacerle si mi imagen esta almacenada en una variable pero no solo hay una sino varias y al momento de ponerle una marca de agua en todos los codigos me pide el nombre de la imagen no c que hacer para saber el nombre de la imagen con la que deseo trabajar???

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *