Ver Mensaje Individual
  #13 (permalink)  
Antiguo 23/03/2016, 10:00
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
APORTE: Función para subir archivos al servidor con PHP (solución completa)

Hola de nuevo,

Bueno, al final, después de comprobar con la empresa de hosting diferentes cuestiones, creo que el aporte puede quedar algo así:

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.     // Contrastar los tipos MIME
  15.     $permitidos = in_array($mime_usuario, $permitidos);  // Devolverá true o false
  16.  
  17.     if($permitidos == FALSE) {
  18.       // Si el archivo no está en la lista de permitidos, devolvemos error.
  19.       return "Error: El archivo enviado no se corresponde a un tipo permitido";
  20.     }
  21.  
  22.     // Comprobar que el tamaño no excede el permitido
  23.     if ( $campo_archivo['size'] > $size ) {
  24.       return "Error: El archivo enviado es mayor de lo permitido";
  25.     }
  26.  
  27.     // Si el archivo existe en la ruta, devolvemos error.
  28.     if ( file_exists($ruta.$campo_archivo['name']) == TRUE ) {
  29.       return "Error: Ya existe ese archivo en la ruta definida";
  30.     }
  31.  
  32.     // Si el archivo no se puede mover a su ruta, devolvemos error.
  33.     $mover_archivo = move_uploaded_file($campo_archivo['tmp_name'], $ruta);
  34.     if ( $mover_archivo === FALSE ) {
  35.       return "Error: Problema al subir el archivo";
  36.     } elseif ( $mover_archivo === FALSE ) {
  37.       return "Error: " . $mover_archivo;
  38.     }
  39.  
  40.   return true;
  41. }

Y el formulario:

Código HTML:
Ver original
  1. <form name="subir_archivos" id="subir_archivos" method="POST" enctype="multipart/form-data">
  2.   <input type="file" name="nombre_del_campo">
  3.   <input type="submit" name="subir" id="subir" value=" Subir Archivo ">
  4. </form>

Para usarlo, con los datos del formulario de ejemplo, tomando como ruta la carpeta "subidas", permitir archivos de tipo imagen y un tamaño de 2 MB, sería así:

Código PHP:
Ver original
  1. // Definir los tipo MIME permitidos para imágenes
  2. $mime_permitidos = array(
  3.                       "image/png",
  4.                       "mage/tiff",
  5.                       "image/bmp",
  6.                       "image/gif",
  7.                       "image/jpeg",
  8.                       "image/jpg",
  9.                       "image/svg",
  10.                       "image/svg+xml"
  11.                   );
  12. // Definimos en una variable la ruta
  13. $ruta = "/home/usuario/public_html/subidas/";
  14.  
  15. // Definimos en una variable el tamaño
  16. $size = 2097152; // 2MB
  17.  
  18. // Comprobamos si el array $_FILES['nombre_del_campo'] está definido
  19. // y no está vacío y se lo asignamos a una variable local, que será un array
  20. // con todos los índices correspondientes al array $_FILES
  21. if ( isset($_FILES['nombre_del_campo']) && !empty($_FILES['nombre_del_campo']) ) {
  22.      $archivo_captura = $_FILES['nombre_del_campo'];
  23. }
  24.  
  25. SubirArchivos($archivo_captura, $ruta.$archivo_captura, $size, $mime_permitidos);
  26.  
  27. //Con solo llamar a la función, nos subirá el archivo a la ruta especificada

Muchas gracias a pateketrueke, caricatos y hhs por su inestimable ayuda sin la cual no habría podido terminar este aporte como tal.

Espero que sea de mucha utilidad a muchas personas.