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

Cita:
Iniciado por xfxstudios Ver Mensaje


Pienso que es un error haber escrito esto por no se que, un aporte es un aporte, incluso todas las soluciones que se dan en el foro a cada pregunta echa es un aporte, porque todo programador se ha encontrado con soluciones de foros del web en algún momento y esta es bastante buena para simplificar algunas tareas con solo llamar a la función, yo solo le realice algunos cambios menores:

Aqui le elimine el nombre del archivo de la ruta porque los subia con la palabra Array en el nombre:

Código PHP:
Ver original
  1. SubirArchivos($archivo_captura, $ruta, $size, $mime_permitidos);

y aqui le agregue el nombre a la ruta al momento de subir el archivo:

Código PHP:
Ver original
  1. $mover_archivo = move_uploaded_file($campo_archivo['tmp_name'], $ruta.$campo_archivo['name']);

Saludos y Gracias por esta función!
Hola de nuevo,

Gracias a ti xfxstudios por tu observación, dejamos aquí como quedaría completo el uso con dicha observación:

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.$campo_archivo['name']);
  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, $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.

Gracias también a xfxstudios por su observación, la verdad es que yo la probé y no me ocurría eso, pero xfxstudios tiene razón, así está mejor

Espero que sea de mucha utilidad a muchas personas.