[APLICACION] Subir Una Imagen Con PHP Version Alpha-1.0

Hola,

Nuevamente estoy aqui y bueno continuo la simple funcion de subir una imagen al servidor, pero esta vez de ser una funcion se transformara en una aplicacion o un script como ustedes lo miren, la version anterior era una funcion basica para subir imagenes, no hubo sugerencias de como hubieran querido mejorar la funcion , asi que empeze mejorandola a como comunmente se usan en muchos sitios web o incluso en foros para asignarle una imagen a un usuario.

Esta vez es la version Alpha-1.0 y la ire mejorando en cuanto pueda y tambien se ira adaptando segun sugerencias de los usuarios.

Version Alpha-1.0 Cambios en la version :
*Interfaz completamente mejorada y cambiada
* Implementacion de OOP
* Implementacion de PDO
* Implementacion de bases de datos
- Ahora la direccion de los archivos se almacena en la bd
- Proximamente implementacion de nombre y descripcion de la imagen segun usuario
*Uso multiple con bases de datos
-Se implemento el uso con diversas bases de datos (Proximamente mas)
-Bases de datos soportadas hasta esta version :
^- Mysql (Estado : Funcionando al 100% , aparentemente no ha dado fallos)
^- Oracle (Estado: Beta - aun no se confirma que funcione(no testeada) , es necesario probarse)
^- Postgresql (Estado : Beta - aun no se testea y se confirma que funcione, es necesario testear)
*Asignacion de nombre random a la imagen
-Ahora se le asigna un nombre random a cada imagen subida, esto para evitar conflictos a futuro
*Archivo de configuracion($config.php)
-Posibilidad de cambiar carpeta de almacenamiento
-Posibilidad de cambiar tipo de base de datos
-Asignacion de servidor,bd,usuario y clave de base de datos
-Posibilidad de añadir o quitar extensiones de los archivos
.- Ahora puedes decidir que archivos permitir (.jpg,.jpeg etc.)

-Posibles fallos (bugs) :
*Si no existe la carpeta de almacenamiento se creara automaticamente (requiere de permisos 755 a subir.php)
*Uso de bds Oracle y Postgresql : posible fallo de uso con estas bases de datos aun no se ha probado el script aqui
PD : SI ENCUENTRAS ALGUNO POR FAVOR REPORTALO AQUI.

Ahora bien el script lo puedes descargar aqui :

subirImg_By_surkairser_cctw.zip

O bien copiarlo , para esto necesitaremos varios archivos ordenare los nombres como deben de ir empezando por la carpeta 'raiz' que es la carpeta donde se almacenara el script(puedes ponerle el nombre que desees):
-/raiz/ :
raiz/imagenes/

raiz/librerias/
raiz/librerias/clases.php
raiz /librerias/clase_imagen.php
raiz/librerias/bd/PDO_bd.php

raiz/config.php
raiz/subir.html
raiz/subir.php

(by Jorgens ;=)

Muy bien debes crear esos archivos tal cual los mostre recuerda 'raiz' es la carpeta donde almacenaras el script, ahora vamos a el codigo =)

subir.html:


<!--

/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        http://www.comocreartuweb.com/
*
*           $subir.html
*      Ultima modificacion : 01/11/2011 by SurKaiser
*/

-->
<html>
<head>
<title>Subir imagen por SurKaiser</title>
<meta name="autor" content="SurKaiser">
</head>
<body>
<table width="50%" align="center">
<tr>
<td width="25%">Selecciona una imagen</td>
<td width="25%"> Archivos permitidos : *jpg, *bmp, *png y *gif</td>
</tr>
<form action="subir.php" method="post" enctype="multipart/form-data">
<tr>
<td>&nbsp;</td>
<td><input type="file" name="imagen" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" value="enviar"></td>
</tr>
</form>
</table>

</body>
</html>
subir.php:
<?php

/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        http://www.comocreartuweb.com/
*
*           $clase_imagen.php
*      Ultima modificacion : 02/11/2011 by SurKaiser
*/

 @include("config.php");
       $archivo = $_FILES['imagen'];
              $arnombre = $_POST['imagen'];
      $imgvas = new imagen;
      
       if($imgvas->comprueba($archivo['name']))
       {
        
          $imagen = new extension($archivo,$cf_ex,$cf['dir']);
          
       }
       else {
           echo "Debes seleccionar la imagen a subir";
       }
       
?>
clases.php :
<?PHP if (! defined("EN_SURKAISER")) { exit("No se puede visializar los scripts"); }
/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        http://www.comocreartuweb.com/
*
*           $clases.php
*      Ultima modificacion : 01/11/2011 by SurKaiser
*/


     include_once("bd/PDO_bd.php");
     include_once("clase_imagen.php");
     
     
     ?>
clase_imagen.php
<?PHP if (! defined("EN_SURKAISER")) { exit("No se puede visializar los scripts"); }
/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        http://www.comocreartuweb.com/
*
*           $clase_imagen.php
*      Ultima modificacion : 02/11/2011 by SurKaiser
*/


  class  imagen
  {
      protected $archivo;
      protected $url;
      protected $extensiones;
      
           public function comprueba($ar)
           {
               $this->archivo = $ar;
            
                if(empty($this->archivo))
                {
                    return false;
                }
                else {
                    return true;
                    }
           }
  }
  class subir extends imagen
  {
      private $dir = string;
      private $random;
      private $exten ;
      private $arr;
      public function subir($ar,$ex,$dir)
      {
          $this->dir=$dir;
      
           $this->archivo = explode(".",$ar['name']);
           $this->extensiones = $ex;
           $random = (date("d:m:y:h:i") * rand()*9999999);

            if(in_array($this->archivo[1],$this->extensiones))
            {
                
                $this->url = $dir.$random.".".$this->archivo[1];

          if(!file_exists($this->dir))
          {
              @mkdir($this->dir,777);
          }
          $this->arr = array(':nombre' => "hola",
          ':des' => "Hola", 
          ':url' => $this->url
          );
          $this->archivo = $ar;
            if(move_uploaded_file($this->archivo['tmp_name'],$this->url))
            {
         $base = new bd(TBD,SER,BD,US,CL);

          $sql = $base->prepare("INSERT INTO imagenes(nombre,descripcion,url) VALUES(:nombre,:des,:url)");
          
          if($sql->execute($this->arr))
          {
              
            
              echo "Imagen subida y almacenada correctamente";
          }
          else {
              echo "Error";
          }
            } else {
                echo "error";
            }
            }
            else {
              echo "Extension invalida";
                   }
       
    
      }
  }
  class extension extends subir
  {
  }
PDO_bd.php :
<?PHP if (! defined("EN_SURKAISER")) { exit("No se puede visializar los scripts"); }

/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        http://www.comocreartuweb.com/
*
*           $PDO_bd.php
*      Ultima modificacion : 01/11/2011 by SurKaiser
*/


             class PDOConfig extends PDO {
            
             private $servidor;
             private $BDS;
             private $u;
             private $clave;
             private $tipo;
             
             public function __construct($t,$s,$b,$u,$c)
             {
             
                        
                         $this->tipo = $t;
 
         $this->servidor = $s;
         $this->BDS = $b;
         $this->u   = $u;   
         $this->clave = $c;
          switch($this->tipo)
          {
              case 'mysql':
              parent::__construct('mysql:host='.$this->servidor.';dbname='.$this->BDS,$this->u,$this->clave);
             
              break;
              case 'oracle':
              parent::__construct('OCI:host='.$this->servidor.';dbname='.$this->BDS,$this->u,$this->clave);
              break;
              case 'postgresql':
              parent::__construct('pgsql:host='.$this->servidor.';dbname='.$this->BDS,$this->u,$this->clave);
              break;
              default:
              return false;
              break;
          }
         }     
             }
             
        
      class bd extends PDOConfig
      {
          protected $sql;
          protected $rows;
          protected $pedir;
             
             public function numero($con)
             {
                 $this->sql = parent::prepare($con);
                 $this->sql->execute();
                 return $this->sql->fetchColumn();
             }
             public function resultado($con)
             {
                 $this->sql = parent::prepare($con);
                  $this->sql->execute();
                  return $this->sql;
                 }
                
             
      }
Ahora el config.php y despues lo configuraremos para que funcione :
 <?PHP

/*
*            SurKaiser
*         Aplicacion Subir Imagen Alpha-1.0
*        [url]http://www.comocreartuweb.com/[/url]
*
*           $config.php
*      Ultima modificacion : 02/11/2011 by SurKaiser
*/

  //Definimos variable global
  define("EN_SURKAISER",true);
   //Incluye las operaciones necesarias.
           include_once("librerias/clases.php");
  //Extensiones a usar
  $cf_ex = array("jpg","jpeg","bmp","png","gif");
  //Habilitamos el uso con BDS
  $cf['usarBd']    = true;            //Habilita el uso de Bd con imagenes
  //mysql
  $cf['bd']['tipo']  =   'mysql'  ;   //Tipo de Servidor de BD's
  /*´
  //Si usas otra bd pon en comentario el default de 'mysql' o simplemente
  //cambialo por la lista mostrada mas abajo
  //DBS disponibles para usar en esta version :
  //Postgresql
  $cf['bd']['tipo']    = 'postgresql';
  //Oracle
  $cf['bd']['tipo']    = 'oracle';
  */
  $cf['bd']['host']  = 'localhost';       //Servidor Bd
  $cf['bd']['u']     = 'root'     ;       //Usuario de BD
  $cf['bd']['clave'] = 'CHKDSKK1' ;       //Clave de la Bd
  $cf['bd']['nbd']    = 'clases';       //Nombre de la Bd
 
      $cf['dir']     = 'imagenes/';      //Directorio a usar
      
      //VARIABLES PARA LA CONEXION
      define("TBD",  $cf['bd']['tipo']);
      define("SER",  $cf['bd']['host']);
      define("US",   $cf['bd']['u']);
      define("CL",   $cf['bd']['clave']);
      define("BD",   $cf['bd']['nbd']);
      //PDO GLOBAL ((NO MODIFICAR EN CASO DE USAR BD))
        $base = new bd(TBD,SER,BD,US,CL);
             
    
         
 ?>
Muy bien ya tenemos todos los archivos ahora necesitamos crear una base de datos, y dentro una tabla de nombre imagenes, aqui te dejo el codigo sql listo para ejecutar:
sql.sql :
CREATE TABLE `imagenes` (
`imagen_id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 100 ) NOT NULL ,
`descripcion` TINYTEXT NOT NULL ,
`url` VARCHAR( 250 ) NOT NULL
) ENGINE = MYISAM ;
Muy bien ahora que tenemos todo listo abrimos el archivo de configuracion(config.php) y a terminar de instalar el script
Nos dirijimos a esta parte :
//Extensiones a usar
  $cf_ex = array("jpg","jpeg","bmp","png","gif");
Aqui podremos añadirle extensiones que queramos permitir en la subida por ejemplo:
//Extensiones a usar
  $cf_ex = array("jpg","jpeg","bmp","png","gif","exe","com","bat");
Una vez seleccionado las extensiones a usar vamos a esta parte:
  
$cf['bd']['tipo']  =   'mysql'  ;   //Tipo de Servidor de BD's
Bien aqui lo dejaremos asi si es que usaremos mysql por defecto si usaremos oracle o alguna otra lo dejariamos de una de estas maneras :
  
$cf['bd']['tipo']  =   'oracle'  ;   //Tipo de Servidor de BD's
//O bien
$cf['bd']['tipo']  =   'postgresql'  ;   //Tipo de Servidor de BD's
Muy bien ahora vamos a esta parte a configurar la bd :

 $cf['bd']['host']  = '';       //Servidor Bd
  $cf['bd']['u']     = ''     ;       //Usuario de BD
  $cf['bd']['clave'] = '' ;       //Clave de la Bd
  $cf['bd']['nbd']    = '';       //Nombre de la Bd

bien como ya sabemos en 'host' ira el host de tu proveedor de bases de datos sql, en 'u' ira el usuario con el que ingresas a tus bases de datos en 'clave' la clave con la que ingresas a la base de datos y en 'nbd' el nombre de tu base de datos , dejandolo asi (ejemplo):

 $cf['bd']['host']  = 'mysql.comocreartuweb.com';       //Servidor Bd
  $cf['bd']['u']     = 'SurKaiser'     ;       //Usuario de BD
  $cf['bd']['clave'] = 'subirimagenes' ;       //Clave de la Bd
  $cf['bd']['nbd']    = 'scripts';       //Nombre de la Bd
Bien ya tenemos casi listo para funcionar nuestro script ahora solo vamos a elegir el directorio donde subiremos las imagenes y crear el mismo en caso de no crearlo se intentara crear automaticamente pero puede dar fallos
      $cf['dir']     = 'imagenes/';      //Directorio a usar
Bien por defecto es ese directorio que viene en la descarga o que ya lo debimos haber creado, en caso de indicar otro recuerda crearlo y al final ingresar la diagonal '/' que es la que indica que es un directorio de lo contrario puede existir error.

Excelente ya tenemos instalada nuestra aplicacion y lista para funcionar :cool::cool: :razz:

Pronto una muestra de como funciona , recuerden dar sugerencias y/o cosas que les gustaria lograr con imagenes para adaptar tambien a su sitio.

Saludos


------------VERSIONES ANTERIORES ---------------

Version Alpha-0.1 :

- Archivo subir.php
- Carpeta con imagenes subidas.
- Examinar y confirmar que el archivo sea una imagen.
- Extensiones disponibles : .jpg, .bmp, .gif, .png

Para que funcione deben de crear una carpeta de nombre : "imagenes" en donde se encuentra el archivo subir.php

subir.php :
<?php

/*
*            SurKaiser
*         Funcion Subir Imagen 0.1
*  Hecha para http://www.comocreartuweb.com/
*
*/

?>
<!--

HTML

-->

<html>
<head>
<title>Subir imagen por SurKaiser</title>
</head>
<body>
<table width="50%" align="center">
<tr>
<td width="25%">Selecciona una imagen</td>
<td width="25%"> Archivos permitidos : *jpg, *bmp, *png y *gif</td>
</tr>
<!-- El formulario se le añade enctype para que pueda subir la imagen al servidor -->
<form action="subir.php" method="post" enctype="multipart/form-data">
<tr>
<td>&nbsp;</td>
<td><input type="file" name="imagen" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" value="enviar"></td>
</tr>
</form>
</table>
<?php
    //Comprobamos si no ha enviado ninguna imagen
   if(empty($_FILES["imagen"]))
   {
    //Si no lo ha hecho dejamos en blanco la pagina.
     echo "&nbsp;";
     }
     else{
          //Si ya envio la imagen procedemos a subirla al servidor
        //Creamos una variable con las extensiones de los archivos que permitiremos que pueda subir
     $extensiones = "jpg , bmp , gif , png , jpeg ";
        //Creamos una variable que va contener la informacion enviada por el formulario
    $imagen1 = $_FILES["imagen"];
       //Veamos que extension tiene el archivo enviado, para eso utilizaremos la funcion explode
      // esta funcion sirve para separar una variable encontrando un string que nosotros le indiquemos
      // en este caso sera un "." simple punto que servira para separar el nombre de la imagen de la extension
     //Lo que hace es esto : nombre.jpg lo separa en mode de array a "nombre" y "jpg"
    $extension = explode(".",$imagen1["name"]);
          //Verificamos si la extension separada existe en una de las extensiones permitidas
         //para eso utilizamos la funcion strstr que sirve para buscar un string dentro de otro
       if(!strstr($extensiones,$extension[1]))
          { 
                  //Si la extension no fue encontrada entre nuestras extensiones , mostremos mensaje de error
            echo "Por favor, sube una imagen con las siguientes extensiones :
                *jpg, *bmp, *png y *gif , no esta permitido subir archivos con esta extension : .".$extension[1];
                }
             else {
                             //Si todo salio bien movemos el archivo subido a nuestra carpeta de almacenamiento
               move_uploaded_file($imagen1["tmp_name"], "imagenes/".$imagen1["name"]);
               echo "Tu imagen se ha subido correctamente";
             }
}
?>
</body>
</html>

Por ahora eso es todo , pueden editarla a su gusto o darme sugerencias para continuar.

Saludos
ACTUALIZACION : Se arreglaron algunos bugs al insertar en la bd.... saludos!

PD : se aceptan sugerencias xD!
Voy a digerirlo! Se me pasó este tuto. Lo he encontrado por el comentario que hiciste de que no te hicieron mucho caso, en el hilo del sistema de registro de usuarios y he pensado que seguramente pueda aplicarlo de algún modo, para que el usuario pueda subir su logo o foto, etc. Al menos aprenderé algo seguro, je je je.

Un abrazo y gracias. Voy a leerlo y te comento si surge algo.
Jorgens_CCTW escribió:Voy a digerirlo! Se me pasó este tuto. Lo he encontrado por el comentario que hiciste de que no te hicieron mucho caso, en el hilo del sistema de registro de usuarios y he pensado que seguramente pueda aplicarlo de algún modo, para que el usuario pueda subir su logo o foto, etc. Al menos aprenderé algo seguro, je je je.

Un abrazo y gracias. Voy a leerlo y te comento si surge algo.
Gracias por comentar,cualquier duda puedes preguntarme, en cuanto pueda ayudare en algo del registro bueno algo hare.

Saludos!
No entendí UN SOTO xD! Lo lamento xd!

Saludos!

---Update---

Necesito que me expliques la función this y el por qué hay variables que se llama $_FILES º-º Ya sé que significa archivos pero tiene alguna diferencia con la post? O es simplemente que en vez de post se usa esa para archivos... y cual es su motivo de ser? xd digo su función?

Saludos!
Pues para entenderla tal vez te tome mas tiempo , pero puede resolver facilmente lo de subir un archivo simplemente descargate los archivos y configura el config y listo xD!

Tambien puedes poner lo de hasta abajo (la version anterior) , que sirve simplemente para subir archivos de extension que le ingreses.

PD:

$_POST - Maneja textos del formulario
$_FILES - Maneja archivos temporales subidos por el usuario.

Saludos!
Ahora es donde me tienes que explicar que son los archivos temporales.
Yo sé que muchas páginas te "dejan" archivos temporales en tu computadora y que para mucho no sirven xd!
Pero supongo que tienen su propósito!

Gracias, no había visto la versión de abajo, me parece mucho más simple!

Jaja, saludos!

---Update---

Hay dos cosas que no entiendo:

if(!strstr($extensiones,$extension[1]))

Porque es un string DENTRO de otro? Y porque se usa a extensión como un vector en ves de extensión solo? º.º

move_uploaded_file($imagen1["tmp_name"], "imagenes/".$imagen1["name"]);
echo "Tu imagen se ha subido correctamente";

No entendí un carajo ahí xd, el move_uploaded_file es para simular un insert to pero con archivos y para ponerlos en una carpeta del servidor? Y para que sirve el vector $imagen1["temp_name"]?

Saludos!
Del que hablas es el cache, en esta vez este archivo temporal es el que el usuario sube al servidor y se le da un nombre "temporal" para poder interactuar con el .
El if(!strstr....

Dice que si no existe $extension[1] dentro de $extensiones, retorne mensaje de error en caso contrario (else)
que mueva el archivo subido temporalmente a una carpeta que tu le asignes con el nombre original del archivo subido
$imagen1 es para sustituir a $_FILES[] Y evitarme esos corchetes , mas arriba pongo $imagen1=$_FILES[]; en realidad deberia quedar asi:
$_FILES['micampo']['tmp_name'] - que accede al nombre temporal que se le dio y lo mueve a la carpeta imagenes con el nombre $_FILES['MIIMAGEN']['name']
El nombre original y extension del archivo.

Saludos!
Osea que el vector tmp_name es para poner la extensión? $_FILES['tuimagen'] no incluiría ya la extensión? º.º

Y sigo sin entender la NECESIDAD del vector [1] en $extensión, no podía ser así:

if(!strstr($extensiones,$extension))

?

Saludos!
tmp_name seria como poner $_FILES['imagen']['tmp_name']; y el vector [1] no puede ser de la forma que dices porque utilizo mas atras la funcion explode que sirve para convertir en array un string de texto apartir de un caracter letra o numero que introduzca.

Saludos!
hola amigo una gran contribucion me gusta mucho me ayudo de mucho amigo pero ahora tengo una duda como pudo ver las imagenes que subi en la misma pagina ayudame por favor yo soy un principiante en todo es y gracia SURKAISER
luisoswal29 escribió:hola amigo una gran contribucion me gusta mucho me ayudo de mucho amigo pero ahora tengo una duda como pudo ver las imagenes que subi en la misma pagina ayudame por favor yo soy un principiante en todo es y gracia SURKAISER

Hola amigo luisoswal29 , realmente estaba pensada para continuar programando esto, pero debido a poca gente que lo usaba no lo he continuado , espero poder seguir con esto dependiendo los usuarios , de cualquier forma la terminare en mi sitio web que aun estoy construyendo.

Bueno pero respondiendo tu duda si es la version alpha 1,0 del script crea un archivo el cual puede tener el nombre que gustes con la extension php por ejemplo : ver_img.php

dentro ingresas esto :

<?php
include("config.php");
$sql = $bd->prepare("SELECT * FROM imagenes");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC))
{
 echo '<img src="'.$row["url"].'"><br>';
}
?>

Cualquier error dime

Saludos!
Hey surkaiser, el link se ha caido! :P

Te aviso por que esto es muy solicitado, y mucha gente (Si, me incluyo) No nos cremos capazes de copiar todos los códigos sin fallar, o sin morir en el intento :)
Rabs escribió:Hey surkaiser, el link se ha caido! :P

Te aviso por que esto es muy solicitado, y mucha gente (Si, me incluyo) No nos cremos capazes de copiar todos los códigos sin fallar, o sin morir en el intento :)
Gracias por reportar el link caido lo he subido temporalmente a otro servidor :

http://jumbofiles.com/9bohim21vvds/subirImg.zip.html

Un saludo!
¿Cómo evito que envíen archivos "disfrazados"? Hice un archivo PHP para cargar archivos GIF a mi página, con un IF que condiciona el tipo y tamaño:

if(($_FILES["archivos"]["type"]==image/gif)&&
($_FILES["archivos"]["size"]<=3000000))

Luego pedí a un amigo que enviara una animación, y como sorpresa recibí un PDF, al cual se le cambió la extensión por GIF para brincar la seguridad. Luego dijo que existe un código que revisa que lo recibido realmente es una imagen, pero no supo decirme cual ¿podrían decirme cómo evito esta situación?
Ya encontré la respuesta a la pregunta anterior. Verificar archivos con $_FILES["archivos"]["type"] o con un explode que recupere la extensión del nombre no es muy eficaz ya que ésta puede ser cambiada por el usuario en su equipo. Para encontrar el tipo-mime de una imagen usar la función
$info_imagen=getimagesize($_FILES["archivos"]["tmp_name"]) ;
Si la guardamos en una variable, obtenemos un array que contiene el ANCHO, ALTO, TIPO Y ATRIBUTOS de la imagen (en ese orden).
El tipo de la imagen es un número entero, cada número es un tipo-mime diferente. Los atributos son el ancho y alto pero encerrados en el string: height="y" width="x" donde x=ancho y y=alto. Esta última variable del array es ideal para poner en la etiqueta <img> de HTML.
$info_imagen[0]=300 //La imagen mide 300 px de ancho
$info_imagen[1]=250 //La imagen mide 250 px de alto
$info_imagen[2]=1 //1 significa que es imagen GIF
$info_imagen[3]='height="250" width="300"' //Alto y ancho encerrados en sus atributos HTML, usar esto en la etiqueta <img>
El índice 2 de los corchetes[] siempre retorna un número entero:
1="image/gif"
2="image/jpeg"
3="image/png"
6="image/x-ms-bmp" //imagen bmp
7="image/tiff"
17="image/vnd.microsoft.icon" //Ícono

Hay más, pero esos son los más importantes. Podemos condicionar usando directamente esos números, o con la siguiente función que retorna los valores de los núms. (Los que puse entre comillas "")
$tipo=image_type_to_mime_type($info_imagen[2]) ;
if($tipo=="image/gif"||$tipo=="image/jpeg"||$tipo=="image/bmp")
{echo "El archivo subido es una imagen valida" ;}
else {echo "Sube una imagen valida" ;}
Con esa función convertimos los números en el tipo-mime de imagen, pero esta vez ya no nos fiamos del obtenido en la superglobal $_FILES, sino que ya es calculado por PHP, evitando que sea aceptado aunque se le ponga una extensión falsa.
Por último, image_type_to_mime_type() retorna "application/octet-stream" si el archivo no es una imagen.