Ver Mensaje Individual
  #9 (permalink)  
Antiguo 21/03/2016, 08:05
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: APORTE: Función para subir archivos al servidor con PHP

Pues ya descubrí el problema: tu lógica es pésima.
Código PHP:
Ver original
  1. function SubirArchivos($campo_archivo, $ruta, $size, $permitidos) {
  2. // Función para subir archivos mediante PHP
  3. // USO: SubirArchivos($campo_archivo, $ruta, $size, $permitidos);
  4. // @param $campo_archivo = $_FILES['nombre_campo'];
  5. // @param $ruta = "ruta_de_subida_del_archivo";
  6. // @param $size = "tamaño máximo permitido en bytes"
  7. // @param $permitidos = array(array con los tipos de archivos permitidos); (http://www.freeformatter.com/mime-types-list.html#mime-types-list)
  8. // @return: Solo retorna en caso de error
  9.  
  10.    // Obtener el tipo MIME del archivo enviado por el usuario
  11.    $finfo = new finfo(FILEINFO_MIME_TYPE);
  12.    $mime_usuario = $finfo->file($campo_archivo['tmp_name']);
  13.  
  14.     // Comprobar si la ruta tiene permisos para escribir
  15.     if (!is_writable($ruta) ) {
  16.       // Si no se puede escribir en ella, devolvemos error
  17.       return "Error: No se puede escribir en el directorio especificado";
  18.     }
  19.  
  20.     // Contrastar los tipos MIME
  21.     $permitidos = in_array($mime_usuario, $permitidos);  // Devolverá true o false
  22.  
  23.     if($permitidos == FALSE) {
  24.       // Si el archivo no está en la lista de permitidos, devolvemos error.
  25.       return "Error: El archivo enviado no se corresponde a un tipo permitido";
  26.     }
  27.  
  28.     // Comprobar que el tamaño no excede el permitido
  29.     if ( $campo_archivo['size'] > $size ) {
  30.       return "Error: El archivo enviado es mayor de lo permitido";
  31.     }
  32.  
  33.     // Si el archivo existe en la ruta, devolvemos error.
  34.     if ( file_exists($ruta.$campo_archivo['name']) == TRUE ) {
  35.       return "Error: Ya existe ese archivo en la ruta definida";
  36.     }
  37.  
  38.     // Si el archivo no se puede mover a su ruta, devolvemos error.
  39.     if (!move_uploaded_file($campo_archivo['tmp_name'], $ruta) ) {
  40.       return "Error: Problema al subir el archivo";
  41.     }
  42.  
  43.   return true;
  44. }

El tema, es que en tu código original metías todas las condiciones dentro del mismo if() que validaba los campos, pero en todas las validaciones buscas errores: jamás validas cuando todo está en orden.

Es decir:
Código PHP:
SI HAGO ALGO MAL
  
RETURN ERROR
  SI HAGO ALGO MAL
    
RETURN ERROR
    SI HAGO ALGO MAL
      
RETURN ERROR
      ETC
... 
Por eso jamás la lógica se alcanzaba: con un error se detenía todo, sin errores igual nunca entraba a dichos bloques.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.