Foros del Web » Programando para Internet » PHP »

Ayuda para disciminar tipo de archivo

Estas en el tema de Ayuda para disciminar tipo de archivo en el foro de PHP en Foros del Web. Hola a todos, Me gustaria poner en este codigo una opcion que me limite el minimo, maximo y tipo de archivo a JPG, GIF, BMP ...
  #1 (permalink)  
Antiguo 06/02/2010, 11:36
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Ayuda para disciminar tipo de archivo

Hola a todos,
Me gustaria poner en este codigo una opcion que me limite el minimo, maximo y tipo de archivo a JPG, GIF, BMP y PNG. Pero no se como colocarlo.
Código PHP:
<?php 
srand 
(time());
    
//generamos un número aleatorio
       //Preguntamos si nuetro arreglo 'archivos' fue definido
    
if (isset ($_FILES["archivos"])) {
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
         //obtenemos la cantidad de elementos que tiene el arreglo archivos
         
$tot count($_FILES["archivos"]["name"]);
         
//este for recorre el arreglo
         
$nombre_usuario=$_GET['id'];
         
$album2 =$_GET['album'];
         
mkdir("galeria/".$nombre_usuario,0777);
         
         for (
$i 0$i $tot$i++){
            
             
$rnd rand(1,100000000000);
            
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
            //para trabajar con este
             
$name $rnd."_".$_FILES["archivos"]["name"][$i];
               
$tmp_name $_FILES["archivos"]["tmp_name"][$i];
            
$linkimagen =("galeria/".$nombre_usuario."/".$name);
           
            echo(
"<b>Archivo </b> $key ");
            echo(
"<br />");
            echo(
"<b>el nombre original:</b> ");
            echo(
$name);
            echo(
"<br />");
            echo(
"<b>el nombre temporal:</b> \n");
            echo(
$tmp_name);
            echo(
"<br />");   
            
            
$insertSQL="INSERT INTO galeria (idusuario, idimagenes, idtitulo) VALUES ('".$nombre_usuario."', '".$linkimagen."', '".$album2."')";   
            
            
$copy copy($tmp_name"galeria/".$nombre_usuario."/".$name);

            
mysql_select_db($database_videoquedada$videoquedada);
            
$Result1 mysql_query($insertSQL$videoquedada) or die(mysql_error());
    }
}

?>
Alguien me puede ayudar u orientarme?.
Un saludo
  #2 (permalink)  
Antiguo 06/02/2010, 17:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

me sorprende que no lo consiguieras, esta todo en el manual de php!:

$tamano = $_FILES["archivo"]["size"];
$tipo = $_FILES["archivo"]["type"];
  #3 (permalink)  
Antiguo 06/02/2010, 17:26
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Ayuda para disciminar tipo de archivo

Como entiendo que los archivos son imagenes, solo un apunte sacado del manual:

La función getimagesize() determinará el tamaño de cualquier archivo de imagen dado y devuelve las dimensiones junto con el tipo de archivo y una cadena de texto de altura/ancho.

ejemplo de ancho y alto por si te pudiese servir:

Código PHP:
list($ancho$alto)= getimagesize($_FILES["imagen"]["tmp_name"]);
      if (
$ancho != 160 or $alto != 120
Saludos
  #4 (permalink)  
Antiguo 06/02/2010, 17:28
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

en el caso del código descrito pos @santis, si funciona, pero debes verificar que el server tenga una versión actualizada de la librería GDI para garantizar al máximo la compatibilidad con otros formatos de imagen, creo que la última va por la 5.x
  #5 (permalink)  
Antiguo 08/02/2010, 11:38
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

Tengo algo de codigo, pero lo que no consigo es saber donde y como colocarlo.
Por ejemplo, en el codigo que he colocado, no se donde debe de estar y como decirle que en caso de que no se ajuste a las dimensiones o formato, me de un error.
El alto y ancho no me interesan, solo el peso y el formato. Para que no me cuelen un ejecutable, solo quiero imagenes JPG, BMP, GIF y PNG
Un saludo y gracias.
  #6 (permalink)  
Antiguo 08/02/2010, 11:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

postealo entonces
  #7 (permalink)  
Antiguo 08/02/2010, 12:13
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Ayuda para disciminar tipo de archivo

Por si necesitas aclararte un poco antes de postearlo como dice maycol.


Con esto restringes a tipo = (gif y jpeg) y tamaño mayor de 50000


Código PHP:
<?php
$dir
'images/';
if (isset (
$_POST['button']) && is_uploaded_file($_FILES['archivo']['tmp_name']))
{
              if (
$_FILES['archivo']['type'] != "image/gif" && $_FILES['archivo']['type'] != "image/jpeg" && $_FILES['archivo']['size']>50000)
             {
                 echo 
"<script>alert('Archivo no permitido!')</script>";
             }    

            else
            {
                
$file$dir.basename($_FILES['archivo']['name']);
                
move_uploaded_file($_FILES['archivo']['tmp_name'], $file);
            }
}
?>
  #8 (permalink)  
Antiguo 08/02/2010, 12:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

Este es el codigo que tengo ahora puesto. Me funciona bien, ya que me escribe en la BB.DD y me sube la imagen.
Pero como digo, no se como hacer ni donde colocar lo que me decis para que si no cumple las restricciones, me envie un error.
Aqui el codigo:
Código PHP:
<?php 
srand 
(time());
    
//generamos un número aleatorio
       //Preguntamos si nuetro arreglo 'archivos' fue definido
    
if (isset ($_FILES["archivos"])) {
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
         //obtenemos la cantidad de elementos que tiene el arreglo archivos
         
$tot count($_FILES["archivos"]["name"]);
         
//este for recorre el arreglo
         
$nombre_usuario=$_GET['id'];
         
$album2 =$_GET['album'];
         
mkdir("galeria/".$nombre_usuario,0777);
         
         for (
$i 0$i $tot$i++){
            
             
$rnd rand(1,100000000000);
            
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
            //para trabajar con este
             
$name $rnd."_".$_FILES["archivos"]["name"][$i];
               
$tmp_name $_FILES["archivos"]["tmp_name"][$i];
            
$linkimagen =("galeria/".$nombre_usuario."/".$name);
           
            echo(
"<b>Archivo </b> $key ");
            echo(
"<br />");
            echo(
"<b>el nombre original:</b> ");
            echo(
$name);
            echo(
"<br />");
            echo(
"<b>el nombre temporal:</b> \n");
            echo(
$tmp_name);
            echo(
"<br />");   
            
            
$insertSQL="INSERT INTO galeria (idusuario, idimagenes, idtitulo) VALUES ('".$nombre_usuario."', '".$linkimagen."', '".$album2."')";   
            
            
$copy copy($tmp_name"galeria/".$nombre_usuario."/".$name);

            
mysql_select_db($database_videoquedada$videoquedada);
            
$Result1 mysql_query($insertSQL$videoquedada) or die(mysql_error());
    }
}

?>
Ahora solo queda colocar las restricciones.
Gracias de nuevo por vuestra ayuda
  #9 (permalink)  
Antiguo 08/02/2010, 12:51
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Ayuda para disciminar tipo de archivo

maycol to tuyo je, je. Por cortesia claro
  #10 (permalink)  
Antiguo 08/02/2010, 12:53
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

puedes colocar (y adaptar) el código de @santis dentro del ciclo, de manera que evalúes si todas las imágenes cumplen con las condiciones, las funciones is_uploaded_file y move_uploaded_file son las más seguras para asegurar tu código, no copy

Cita:
Iniciado por santris Ver Mensaje
maycol to tuyo je, je
jajaja, visona, menos mal que no soy tu profesor, porque de seguro repruebas conmigo XD
  #11 (permalink)  
Antiguo 08/02/2010, 12:57
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

Muy facil para alguien que entiende, pero para uno que no entiende mucho, como se coloca.... maycol.... tooo tuyo, :)
  #12 (permalink)  
Antiguo 08/02/2010, 13:00
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Ayuda para disciminar tipo de archivo

visona ya dije que era por cortesia, aunque la verdad no entiendo mucho por eso sigo aprendiendo.

Saludos
  #13 (permalink)  
Antiguo 08/02/2010, 13:03
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

Un poco de paciencia, recuerda que no es obligación:

Código PHP:
srand (time());
    
//generamos un número aleatorio
       //Preguntamos si nuetro arreglo 'archivos' fue definido
    
if (isset ($_FILES["archivos"])) {
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
         //obtenemos la cantidad de elementos que tiene el arreglo archivos
         
$tot count($_FILES["archivos"]);
         
//este for recorre el arreglo
         
$nombre_usuario=$_GET['id']; // y estos GET????????????
         
$album2 =$_GET['album']; ///?????
         
mkdir("galeria/".$nombre_usuario,0777);
         
         foreach (
$_FILES["archivos"] as $ifile){
            
            if (
is_uploaded_file($ifile['tmp_name']){
                if ((
$ifile['type'] != "image/gif" && $ifile['type'] != "image/jpeg") || ($ifile['size']>50000))
                {
                    echo 
"Archivo no permitido: ".$ifile["tmp_name"];
                }
                else
                {
                    
$rnd rand(1,100000000000);
                    
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
                    //para trabajar con este
                     
$name $rnd."_".$ifile["name"];
                       
$tmp_name $ifile["tmp_name"];
                    
$linkimagen =("galeria/".$nombre_usuario."/".$name);
                   
                    echo(
"<b>Archivo </b> $key ");
                    echo(
"<br />");
                    echo(
"<b>el nombre original:</b> ");
                    echo(
$name);
                    echo(
"<br />");
                    echo(
"<b>el nombre temporal:</b> \n");
                    echo(
$tmp_name);
                    echo(
"<br />");                    
                    
$insertSQL="INSERT INTO galeria (idusuario, idimagenes, idtitulo) VALUES ('".$nombre_usuario."', '".$linkimagen."', '".$album2."')";   
                    
                    
//$copy = copy($tmp_name, "galeria/".$nombre_usuario."/".$name);
                    
move_uploaded_file($ifile['tmp_name'], "galeria/".$nombre_usuario."/".$name);
                    
                    
mysql_select_db($database_videoquedada$videoquedada);
                    
$Result1 mysql_query($insertSQL$videoquedada) or die(mysql_error());
                    
                }
            }             
        }
    } 
NOTA:

revisa que en el formulario, los nombres de los input file sean así:

<input type="file" name="archivos[]" /> sin los corchetes no funciona

Última edición por maycolalvarez; 09/02/2010 a las 10:30
  #14 (permalink)  
Antiguo 08/02/2010, 13:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

Muchas gracias, ahora prueba. peroooooo. esta linea se quita?
Código PHP:
 for ($i 0$i $tot$i++){ 
  #15 (permalink)  
Antiguo 08/02/2010, 13:14
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

Cita:
Iniciado por visona Ver Mensaje
Muchas gracias, ahora prueba. peroooooo. esta linea se quita?
Código PHP:
 for ($i 0$i $tot$i++){ 
con foreach no hace falta , además estabas referenciando mal los archivos del array:

$_FILES['archivos']['name'][$i]; //esta mal (el nombre no contiene los archivos)

$_FILES['archivos'][$i]['name']; //Bien
  #16 (permalink)  
Antiguo 08/02/2010, 13:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

ok, me funciona, me sube los archivos, pero he subido un TXT y tambien me lo a impreso en la BB.DD. osea que no funciona como deberia, ya que solo deberia de subir los JPG, BMP, PNG y GIF
  #17 (permalink)  
Antiguo 08/02/2010, 13:21
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

cierto , reedite, me faltaron los $ en la línea:

if ($ifile['type'] != "image/gif" && $ifile['type'] != "image/jpeg" && $ifile['size']>50000)

disculpa! XD, intenta a ver (para que veas que también los que sabemos nos equivocamos )

PD: en esa linea debes de agregar los otros tipos que quieres, como png y bmp

Última edición por maycolalvarez; 08/02/2010 a las 13:27
  #18 (permalink)  
Antiguo 09/02/2010, 03:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

Hola maycol; Los $GET me cojen unas variables que necesito para insertar en la BB.DD se los paso por URL y me va bien.
Despues de poner tu codigo reeditado, no me funciona, pantalla en blanco. Estoy mirando y no le veo el fallo. a ver si tu lo encuentras.
Un saludo y gracias por el interes tomado (aunque te equivoques)
  #19 (permalink)  
Antiguo 09/02/2010, 10:31
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

reedito de nuevo, la condición la saque de @santris, y no me había fijado bien, debería funcionar así:

Código PHP:
if (($ifile['type'] != "image/gif" && $ifile['type'] != "image/jpeg") || ($ifile['size']>50000))
                {
                    echo 
"Archivo no permitido: ".$ifile["tmp_name"];
                } 
  #20 (permalink)  
Antiguo 09/02/2010, 11:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

a ver si con esto termina de funcionar:

Código PHP:
srand (time());
    
//generamos un número aleatorio
       //Preguntamos si nuetro arreglo 'archivos' fue definido
    
if (isset ($_FILES["archivos"])) {
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
         //obtenemos la cantidad de elementos que tiene el arreglo archivos
         
$tot count($_FILES["archivos"]);
         
//este for recorre el arreglo
         
$nombre_usuario=$_GET['id']; // y estos GET????????????
         
$album2 =$_GET['album']; ///?????
         
mkdir("galeria/".$nombre_usuario,0777);
         
         foreach (
$_FILES["archivos"] as $ifile){
            
            if (
is_uploaded_file($ifile['tmp_name'])){
                if ((
strpos($ifile['type'], "gif") || strpos($ifile['type'], "jpg")) && $ifile['size']<50000)
                {
                    
$rnd rand(1,100000000000);
                    
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
                    //para trabajar con este
                     
$name $rnd."_".$ifile["name"];
                       
$tmp_name $ifile["tmp_name"];
                    
$linkimagen =("galeria/".$nombre_usuario."/".$name);
                   
                    echo(
"<b>Archivo </b> $key ");
                    echo(
"<br />");
                    echo(
"<b>el nombre original:</b> ");
                    echo(
$name);
                    echo(
"<br />");
                    echo(
"<b>el nombre temporal:</b> \n");
                    echo(
$tmp_name);
                    echo(
"<br />");                    
                    
$insertSQL="INSERT INTO galeria (idusuario, idimagenes, idtitulo) VALUES ('".$nombre_usuario."', '".$linkimagen."', '".$album2."')";   
                    
                    
//$copy = copy($tmp_name, "galeria/".$nombre_usuario."/".$name);
                    
move_uploaded_file($ifile['tmp_name'], "galeria/".$nombre_usuario."/".$name);
                    
                    
mysql_select_db($database_videoquedada$videoquedada);
                    
$Result1 mysql_query($insertSQL$videoquedada) or die(mysql_error());
                }
                else
                {
                    echo 
"Archivo no permitido: ".$ifile["tmp_name"];                    
                }
            }             
        }
    } 

Última edición por maycolalvarez; 09/02/2010 a las 11:43
  #21 (permalink)  
Antiguo 09/02/2010, 11:40
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

estoy revisando y me he fijado que aqui falta un cierre
Código PHP:
 if (is_uploaded_file($ifile['tmp_name']){ 
es asi?
  #22 (permalink)  
Antiguo 09/02/2010, 11:44
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

cierto, ya reedite, no tuve tiempo de probarlo, pero creo que puedes resolver esos escollos fácilmente , prueba y me avisas!
  #23 (permalink)  
Antiguo 09/02/2010, 11:55
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

nada, ahora NO hay pagina en blanco, pero tampoco me sube imagen ni me inserta el link en la BB.DD
  #24 (permalink)  
Antiguo 10/02/2010, 06:51
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Ayuda para disciminar tipo de archivo

que raro, intenta cambiar strpos por stripos para que no discrimine las mayúsculas
  #25 (permalink)  
Antiguo 11/02/2010, 03:42
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

pos no funciona, es mas esa funcion el programa DW CS4 no me la reconoce.
  #26 (permalink)  
Antiguo 11/02/2010, 03:54
 
Fecha de Ingreso: agosto-2008
Mensajes: 367
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

$hayfotos = false;
{
if ($_FILES['foto1']['size'] > 0) { $hayfoto = true; }
}
if ($hayfoto) {
if (strtolower(substr($_FILES['foto1']['type'],-4))!="jpeg" && strtolower(substr($_FILES['foto1']['type'],-3))!="png" && strtolower(substr($_FILES['foto1']['type'],-3))!="gif")
{
echo "<script type=\"text/javascript\">alert(\"Solo se permiten extenciones de imagenes jpg,gif,png (foto)\");location.href='../pagina.php'</script>";
$error = true;
}
elseif($_FILES['foto1']['size']>102400)

{
echo "<script type=\"text/javascript\">alert(\"Archivo exedido de tamaño.. permitido hasta 100kb (foto1) \");location.href='../pagina.php'</script>";
$error = true;
}
}
elseif(!$error)
{
//continua
}
  #27 (permalink)  
Antiguo 11/02/2010, 03:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 367
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

solo debes adaptarlo a tu codigo nombre de imagen y demas... no le preste atencion a tu codigo aqui te paso como debes hacer para ver si los archivos y o tamaño estan bien... solo adapta el resto...
suerte
  #28 (permalink)  
Antiguo 14/02/2010, 15:46
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ayuda para disciminar tipo de archivo

OK, solucionado, al final lo he tenido que hacer con variables.
Gracias

Etiquetas: tipo
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 07:07.