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 originalfunction SubirArchivos($campo_archivo, $ruta, $size, $permitidos) {
// Función para subir archivos mediante PHP
// USO: SubirArchivos($campo_archivo, $ruta, $size, $permitidos);
// @param $campo_archivo = $_FILES['nombre_campo'];
// @param $ruta = "ruta_de_subida_del_archivo";
// @param $size = "tamaño máximo permitido en bytes"
// @param $permitidos = array(array con los tipos de archivos permitidos); (http://www.freeformatter.com/mime-types-list.html#mime-types-list)
// @return: Solo retorna en caso de error
// Obtener el tipo MIME del archivo enviado por el usuario
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_usuario = $finfo->file($campo_archivo['tmp_name']);
// Contrastar los tipos MIME
$permitidos = in_array($mime_usuario, $permitidos); // Devolverá true o false
if($permitidos == FALSE) {
// Si el archivo no está en la lista de permitidos, devolvemos error.
return "Error: El archivo enviado no se corresponde a un tipo permitido";
}
// Comprobar que el tamaño no excede el permitido
if ( $campo_archivo['size'] > $size ) {
return "Error: El archivo enviado es mayor de lo permitido";
}
// Si el archivo existe en la ruta, devolvemos error.
if ( file_exists($ruta.$campo_archivo['name']) == TRUE ) { return "Error: Ya existe ese archivo en la ruta definida";
}
// Si el archivo no se puede mover a su ruta, devolvemos error.
if ( $mover_archivo === FALSE ) {
return "Error: Problema al subir el archivo";
} elseif ( $mover_archivo === FALSE ) {
return "Error: " . $mover_archivo;
}
return true;
}
Y el formulario:
Código HTML:
Ver original<form name="subir_archivos" id="subir_archivos" method="POST" enctype="multipart/form-data"> <input type="file" name="nombre_del_campo"> <input type="submit" name="subir" id="subir" value=" Subir Archivo ">
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// Definir los tipo MIME permitidos para imágenes
$mime_permitidos = array( "image/png",
"mage/tiff",
"image/bmp",
"image/gif",
"image/jpeg",
"image/jpg",
"image/svg",
"image/svg+xml"
);
// Definimos en una variable la ruta
$ruta = "/home/usuario/public_html/subidas/";
// Definimos en una variable el tamaño
$size = 2097152; // 2MB
// Comprobamos si el array $_FILES['nombre_del_campo'] está definido
// y no está vacío y se lo asignamos a una variable local, que será un array
// con todos los índices correspondientes al array $_FILES
if ( isset($_FILES['nombre_del_campo']) && !empty($_FILES['nombre_del_campo']) ) { $archivo_captura = $_FILES['nombre_del_campo'];
}
SubirArchivos($archivo_captura, $ruta.$archivo_captura, $size, $mime_permitidos);
//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.