Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: bengy en 11 Octubre 2013, 00:06 am



Título: subir multiples archivos
Publicado por: bengy en 11 Octubre 2013, 00:06 am
hola quisiera que me ayuden a restringir el tipo de formato de los archivos que seran subidos al servidor

aqui les dejo mi avance
Código:
<html>
    <head>
        <title></title>
    </head>
    <body>
       
        <form method="post" action="CrearProblema.php" enctype="multipart/form-data">
            Nombre del problema:
            <input type="text"    name="nombre">     <br>         
     
            <label>Seleccione los archivos</label><br>
            inserte el enunciado:                               <input type="file" name="archivo[]"><br>
            inserte la entrada: &nbsp; &nbsp;                   <input type="file" name="archivo[]"><br>
            inserte la salida:  &nbsp; &nbsp;&nbsp; &nbsp;      <input type="file" name="archivo[]"><br>

            <input type="submit" value="Crear Problema">
                       
        </form>
    </body>
</html>



Código:
<?php 


    include("cnx.php");
    $cnx = pg_connect($entrada) or die ("Error de conexion. ". pg_last_error());
    $mensaje        ="";
    $dir            ="";
    $seleccionar    ="SELECT nombre_problema  FROM problema";
    $result         = pg_query($seleccionar) or die('ERROR AL INSERTAR DATOS: ' . pg_last_error());
    $columnas       = pg_numrows($result);


    for($i=1;$i<=$columnas; $i++){
        $line = pg_fetch_array($result, null, PGSQL_ASSOC);
        if(!strcmp($line['nombre_problema'] ,$_REQUEST['nombre'])){ // El nombre ya existe en la bd???
           $mensaje="existe";
         
        }
    }   
 
   
    if($mensaje!="existe"){
       
    $insertar= "INSERT INTO problema(nombre_problema) VALUES ('$_REQUEST[nombre]');";
    $result = pg_query($cnx, $insertar) or die('ERROR AL INSERTAR DATOS: ' . pg_last_error());
   
    $seleccionar="SELECT id_problema  FROM problema  where nombre_problema='$_REQUEST[nombre]'";
    $result     = pg_query($seleccionar) or die('ERROR AL INSERTAR DATOS: ' . pg_last_error());
    $columnas   = pg_numrows($result);


    for($i=1;$i<=$columnas; $i++){
        $line = pg_fetch_array($result, null, PGSQL_ASSOC);
        echo $line['id_problema'];
    }
        echo $_REQUEST['nombre'];
        $dir=$line['id_problema'];
        mkdir($line['id_problema']);

    }
    else{
       // "enviamos un mensaje a la vista, ya existe el problema"
    }
   

moverArchivos($_FILES); //llamamos a la funcion que mueve y comprueba los archivos


function moverArchivos($archivos){ //Optimizada para multiples archivos

$directorio = "upload"; //ubicacion y nombre del directorio donde se guarda
$ubicaciones = array();

$extensiones = array("in","out"); //extensiones permitidas

if(isset($archivos["archivo"]["error"])){

foreach ($archivos["archivo"]["error"] as $key => $error) {
if ($error == 0) {
$trozo = explode(".",$archivos["archivo"]["name"][$key]); //obtenemos la extensión
$extension = strtolower(end($trozo)); //la pasamos a minuscula
if(in_array($extension, $extensiones)){
                                            $valido = true;
                                        }
                                        else{
                                            $valido = false;
                                        }


if(isset($valido) and $valido === true){ //si el archivo es valido lo intentamos mover
$nombre_archivo = date("Ymd") . "_" . date("is"). "_img_".$trozo[0].".".$extension; //generamos un nombre personalizable
$ubicacion_original = $archivos["archivo"]["tmp_name"][$key]; //ubicacion original y temporal del archivo

if(!move_uploaded_file($ubicacion_original,"$directorio/$nombre_archivo")){
echo "No se puede mover el archivo \n";
}
else{
$ubicaciones[] = $nombre_archivo;
}
}
else{
echo "Extension de archivo no valida \n";
}
                                       
} else{
if($error != 0 and $error != 4){ //Si no subieron archivos No enviar ninguna advertencia
$mensaje_error = mensajesErrorArchivos($archivos["archivo"]["error"][$key]);
echo $mensaje_error." Intente nuevamente. \n";
die;
}
}
}
return $ubicaciones;
} //fin del existe error
else { echo "Uno de los archivos sobrepasa la capacidad establecida por el servidor";}

} // Termina la funcion moverArchivos()

   pg_close($cnx);
   

?>



Título: Re: subir multiples archivos
Publicado por: miloscorp en 17 Octubre 2013, 17:49 pm
Hola bjpenn creo que te estas complicando demasiado, es mas facil hacer algo asi

Código:
foreach $_FILES as archivo{
switch archivo['type']{
case "image/jpeg"
//Es jpeg
break;
case "image/gif"
//gif
break;
}
}

Igualmente $_FILE['archivo']['type'] segun la documentación no se verifica en el servidor, solamente te devuelte el mime type que te envia el navegador. Si queres verificar el mime type en el servidor tendrias que usar la función finfo_file()