Foros del Web » Programando para Internet » PHP »

Validar extension de imagen

Estas en el tema de Validar extension de imagen en el foro de PHP en Foros del Web. Hola, tengo este upload, pero quiero ver como validadr la extension de las imagenes subidas, quiero que solo se suban imagenes png y jpg, pero ...
  #1 (permalink)  
Antiguo 22/06/2010, 22:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
Validar extension de imagen

Hola, tengo este upload, pero quiero ver como validadr la extension de las imagenes subidas, quiero que solo se suban imagenes png y jpg, pero no se hacerlo me pueden ayudar?

index.html

Código HTML:
<form name="formulario" enctype="multipart/form-data" method="POST" action="subir.php">
<input type="file" name="archivo" id="archivo"><br>
<input type="submit" value="Enviar">
</form> 
subir.php

Código PHP:
<?php
$ruta 
"./imagenes/" $_FILES['archivo']['name'];
copy($_FILES['archivo']['tmp_name'], $ruta);
echo 
"La imagen subio correctamente";
?>
  #2 (permalink)  
Antiguo 22/06/2010, 22:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Validar extension de imagen

Te recomiendo que hagas un var_dump a $_FILES para que veas toda la estructura de esa variable. Pero para que realmente verifiques una extensión y sea lo que realmente tu esperas o sea una imagen te recomiendo que uses las funciones o clase de fileinfo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/06/2010, 22:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
Respuesta: Validar extension de imagen

mira men tengo este codigo que intente hacer, pero no me funciona

Código PHP:
<?php
$ruta 
"./imagenes/" $_FILES['archivo']['name'];
copy($_FILES['archivo']['tmp_name'], $ruta);
echo 
"La imagen subio correctamente";

<
script>
<!-- 

function 
comprueba_extension(formularioarchivo) {
   
extensiones_permitidas = new Array(".gif"".jpg"".doc"".pdf");
   
mierror "";
   if (!
archivo) {
      
//Si no tengo archivo, es que no se ha seleccionado un archivo en el formulario
       
mierror "No has seleccionado ningún archivo";
   }else{
      
//recupero la extensión de este nombre de archivo
      
extension = (archivo.substring(archivo.lastIndexOf("."))).toLowerCase();
      
//alert (extension);
      //compruebo si la extensión está entre las permitidas
      
permitida false;
      for (var 
0extensiones_permitidas.lengthi++) {
         if (
extensiones_permitidas[i] == extension) {
         
permitida true;
         break;
         }
      }
      if (!
permitida) {
         
mierror "Comprueba la extensión de los archivos a subir. \nSólo se pueden subir archivos con extensiones: " extensiones_permitidas.join();
       }else{
          
//submito!
         
alert ("Todo correcto. Voy a submitir el formulario.");
         
formulario.submit();
         return 
1;
       }
   }
   
//si estoy aqui es que no se ha podido submitir
   
alert (mierror);
   return 
0;
}

-->
</script> 


?>
  #4 (permalink)  
Antiguo 23/06/2010, 08:18
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Validar extension de imagen

Debes postea tambie el formulario html porque quiza no estes llamando a la
funcion comprueba_extension o no le estes pasando los valores correctamente, etc, etc
  #5 (permalink)  
Antiguo 23/06/2010, 08:18
 
Fecha de Ingreso: septiembre-2009
Mensajes: 124
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Validar extension de imagen

Buenas!

Mas facil seria que hagas un explode. Seria algo asi:

Código PHP:
$extension endexplode"."$_FILES['imagen']['name'] ) );
if( 
in_array$extension$arra_extensiones ) ) {
  ...
} else {
  ...

  #6 (permalink)  
Antiguo 23/06/2010, 08:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Validar extension de imagen

El tipo de archivo se puede ver dentro de la variable $_FILES, te recomiendo que hagas un var_dump a la variable para que veas la estructura del array y así puedas verificar que extensión fue la que subió el usuario.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 23/06/2010, 18:34
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Validar extension de imagen

Disculpas, ni lo habia visto al formulario

Tu codigo funciona muy bien solo habia que ordenarlo, y agregarle unas pequeñas cosas, lo cual hice... y mejor te devuelvo todo el codigo con esos pequeños cambios:

Verifica que uno de los codigos es javaScript, no php; y otro si php (el upload)

Crea un archivo php y mete todo esto, solo ejecutalo, carga una imagen (con el boton examinar), y el codigo hara todo lo demas... la imagen sera subida al mismo directorio donde este este script...

Al documento nuevo no le abras ni cierres etiquetas, solo mete el codigo y listo

Luego hazle las modificaciones que te interesen:

Código PHP:


<!-- Esto reemplaza a tu simple etiqueta <script> -->
<script type="text/javascript" language="javascript"> 
<!--  

function comprueba_extension(formulario, archivo) { 

//alerts para que vea lo que te muestra y lo analices
alert(formulario);
alert(archivo);

   extensiones_permitidas = new Array(".gif", ".jpg", ".doc", ".pdf"); 
   mierror = ""; 
   if (!archivo) { 
      //Si no tengo archivo, es que no se ha seleccionado un archivo en el formulario 
       mierror = "No has seleccionado ningún archivo"; 
   }else{ 
      //recupero la extensión de este nombre de archivo 
      extension = (archivo.substring(archivo.lastIndexOf("."))).toLowerCase(); 
      //alert (extension); 
      //compruebo si la extensión está entre las permitidas 
      permitida = false; 
      for (var i = 0; i < extensiones_permitidas.length; i++) { 
         if (extensiones_permitidas[i] == extension) { 
         permitida = true; 
         break; 
         } 
      } 
      if (!permitida) { 
         mierror = "Comprueba la extensión de los archivos a subir. \nSólo se pueden subir archivos con extensiones: " + extensiones_permitidas.join(); 
       }else{ 
          //submito! 
         alert ("Todo correcto. Voy a submitir el formulario."); 
         //a esta linea le faltaba "document"
         document.formulario.submit(); 
         return 1; 
       } 
   } 
   //si estoy aqui es que no se ha podido submitir 
   alert (mierror); 
   return 0; 


--> 
</script>  

<!--
"this.form.name" contiene el nombre del formulario
"this.form[0].value" contiene la ruta del archivo a subir
-->

<form name="formulario" enctype="multipart/form-data" method="POST" action="">

<input type="file" 
           name="archivo" 
           id="archivo"
          onchange="comprueba_extension(this.form.name,this.form[0].value)"><br>

<!-- <input type="submit" value="Enviar"> -->
</form>


<?php 

//echo "Se subira ". $_FILES['archivo']['name'];
//$ruta = "./imagenes/" . $_FILES['archivo']['name']; 
$ruta $_FILES['archivo']['name']; 

$r=copy($_FILES['archivo']['tmp_name'], $ruta); 

if(
$r){
echo 
"La imagen subio correctamente"
}

?>
  #8 (permalink)  
Antiguo 23/06/2010, 19:36
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
Si men me funciono!!! GRACIAS!!

Otra duda!
Alguien sabe como ponerle para que genere un nombre aleatorio? Por si suben el mismo nombre se cambie

Hola, tengo este upload, pero quiero que en ves de que se suba con su nombre se suba con un nombre generado aeleatoriamente, este es el codigo

Código PHP:
<!-- Esto reemplaza a tu simple etiqueta <script> -->
<script type="text/javascript" language="javascript"> 
<!--  

function comprueba_extension(formulario, archivo) { 

//alerts para que vea lo que te muestra y lo analices
alert(formulario);
alert(archivo);

   extensiones_permitidas = new Array(".gif", ".jpg", ".png", ".bmp"); 
   mierror = ""; 
   if (!archivo) { 
      //Si no tengo archivo, es que no se ha seleccionado un archivo en el formulario 
       mierror = "No has seleccionado ningún archivo"; 
   }else{ 
      //recupero la extensión de este nombre de archivo 
      extension = (archivo.substring(archivo.lastIndexOf("."))).toLowerCase(); 
      //alert (extension); 
      //compruebo si la extensión está entre las permitidas 
      permitida = false; 
      for (var i = 0; i < extensiones_permitidas.length; i++) { 
         if (extensiones_permitidas[i] == extension) { 
         permitida = true; 
         break; 
         } 
      } 
      if (!permitida) { 
         mierror = "Comprueba la extensión de los archivos a subir. \nSólo se pueden subir archivos con extensiones: " + extensiones_permitidas.join(); 
       }else{ 
          //submito! 
         alert ("Todo correcto. Voy a submitir el formulario."); 
         //a esta linea le faltaba "document"
         document.formulario.submit(); 
         return 1; 
       } 
   } 
   //si estoy aqui es que no se ha podido submitir 
   alert (mierror); 
   return 0; 


--> 
</script>  

<!--
"this.form.name" contiene el nombre del formulario
"this.form[0].value" contiene la ruta del archivo a subir
-->

<form name="formulario" enctype="multipart/form-data" method="POST" action="">

<input type="file" 
           name="archivo" 
           id="archivo"
          onchange="comprueba_extension(this.form.name,this.form[0].value)"><br>

<!-- <input type="submit" value="Enviar"> -->
</form>


<?php 

//echo "Se subira ". $_FILES['archivo']['name'];
$ruta "./imagenes/" $_FILES['archivo']['name']; 


$r=copy($_FILES['archivo']['tmp_name'], $ruta); 

if(
$r){
echo 
"La imagen subio correctamente"
}

?>

Última edición por GatorV; 23/06/2010 a las 22:34
  #9 (permalink)  
Antiguo 23/06/2010, 20:40
Avatar de funkii  
Fecha de Ingreso: junio-2010
Mensajes: 64
Antigüedad: 13 años, 10 meses
Puntos: 4
Respuesta: Validar extension de imagen

con php lo podes hacer y hay una manera muy facil:

supongamos que tenemos la variable:

$imagen = $_FILES['imagen'];

la cual se refiere al formulario por la cual la suben

entonces hacemos asi:

Código PHP:
Ver original
  1. $nombreimagen = time() . $imagen['name'];

lo que estamos haciendo es concatenarle al nombre de la imagen que sube el tiempo en que la subio desde el 1 de enero de 1970, por lo tanto la posibilidad de que la imagen se reemplaze por tener el mismo nombre es practicamente nula :)
  #10 (permalink)  
Antiguo 23/06/2010, 21:20
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
men ya lo intente pero es dificil no me funciona me podrias ayudar?

Código PHP:
<?php 

//echo "Se subira ". $_FILES['archivo']['name'];
$ruta "./imagenes/" $_FILES['archivo']['name']; 
$nombreimagen time() . $ruta['name'];



$r=copy($_FILES['archivo']['tmp_name'], $ruta); 



if(
$r){
echo 
"La imagen subio correctamente"
}

?>
Tengo esto asi y si los sube:

Código PHP:
<?php 

//echo "Se subira ". $_FILES['archivo']['name'];
$ruta "./imagenes/" $_FILES['archivo']['name']; 
$nombreimagen time() . $ruta['name'];



$r=copy($_FILES['archivo']['tmp_name'], $nombreimagen); 



if(
$r){
echo 
"La imagen subio correctamente"
}

?>

Si cambia el nombre, pero los sube si extension has de cuenta lo sube asi: 1235162.

no pone .jpg ni nada de eso solo pone el punto.
2. Tampoco lo sube a la carpeta imagenes lo sube a la carpeta normal

Última edición por GatorV; 23/06/2010 a las 22:34
  #11 (permalink)  
Antiguo 24/06/2010, 07:39
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Validar extension de imagen

Asi es:

Código PHP:


$ruta 
"./imagenes/" .time(). $_FILES['archivo']['name'];  


$r=copy($_FILES['archivo']['tmp_name'], $ruta); 
  #12 (permalink)  
Antiguo 18/01/2011, 20:32
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años
Puntos: 2
Respuesta: Validar extension de imagen

Gracias! Pero no puedo ver las imagenes en otra web, ni en foros del web:



A no si se puede, gracias solo q lo avia posteado en taringa y no se veian, pero ya lo solucione

Etiquetas: imagenes, upload, validar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:58.