Foros del Web » Programando para Internet » PHP »

Upload múltiple: si un archivo supera el tamaño, no subir ninguno

Estas en el tema de Upload múltiple: si un archivo supera el tamaño, no subir ninguno en el foro de PHP en Foros del Web. Hola, estoy haciendo un upload multiple y me di cuenta del error q estoy teniendo. Por ejemplo, subo 3 archivos y uno de esos archivos ...
  #1 (permalink)  
Antiguo 14/04/2014, 09:00
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Upload múltiple: si un archivo supera el tamaño, no subir ninguno

Hola,

estoy haciendo un upload multiple y me di cuenta del error q estoy teniendo.

Por ejemplo, subo 3 archivos y uno de esos archivos supera el tamaño permitido y no se guarda nada en base de datos, pero sí me guarda los otros 2 archivos en el directorio.

Como puedo evitar eso?

Código PHP:
    public function upload($files){

        
//Extensiones de archivos permitidas
        
$valid_formats = array('jpeg''jpg''png''gif''pdf''rar''zip');
        
$max_file_size 2097152// 2 Mb

        
$saveFiles = array();
        
$filesOk '';

//        //Recorro files
        
foreach ($files as $i => $file) {

            
//Verifico que no venga vacío el name (si no existe name, tampoco existe archivo)
            
if($file['error'] != && $file['name'] != ''){
               
                
//Error = 1: Tamaño de archivo excede al valor seteado en php.ini
                //$max_file_size, tamaño máximo permitido seteado en bootstrap
                
if($file['error'] == or $file['size'] > $max_file_size){
                    
$this->Session->setFlash(__('El tamaño del archivo no debe ser mayor a 2 Mb'));
                    
$this->redirect($this->referer());                        
                }else{
                    
//Obtengo extension de los archivos
                    
$type_archive explode('/'$file['type']);

                    
//Si la extensión es permitida, guardo archivo en directorio
                    //de lo contrario, envío mensaje de error
                    
if(!in_array($type_archive[1], $valid_formats)){
                        
$this->Session->setFlash(__('Extensión de archivo no válida'));
                        
$this->redirect($this->referer());                            
                    }else{
//                        $filename = $this->Ticket->uploadFile($file);

                        /* Subo el archivo al directorio */
                        
                        
if ($filename){
                            
$saveFiles[] = $filename;
                        }
                            
//Names se guardan serializados
                            
$filesOk serialize($saveFiles);
                    }
                }               
            }
        }
        
        return 
$filesOk;
    } 
Gracias
  #2 (permalink)  
Antiguo 14/04/2014, 09:38
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Upload múltiple: si un archivo supera el tamaño, no subir ninguno

La solución ya la tienes, solo cambia el orden en el que haces las cosas; es decir primero valida que todo venga como esperas y si hay un error no pasas a salvar nada en $save_files
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 14/04/2014, 10:08
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Upload múltiple: si un archivo supera el tamaño, no subir ninguno

Cita:
Iniciado por hhs Ver Mensaje
La solución ya la tienes, solo cambia el orden en el que haces las cosas; es decir primero valida que todo venga como esperas y si hay un error no pasas a salvar nada en $save_files
Pero eso es lo q hago, lo q pasa q foreach me comprueba de a un indice a la vez y siempre me va a guardar el q pase la validacion y va a cortar cuando un archivo no la pase, pero igual queda guardado el archivo en directorio.

La verdad q no me doy cuenta como puedo hacer, lo unico q se me ocurre es utilizar unlink() y eliminar los archivos q se subieron

Etiquetas: múltiple, supera, tamaño, upload
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 05:27.