Pues ya descubrí el problema: tu lógica es pésima.
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']);
// Comprobar si la ruta tiene permisos para escribir
// Si no se puede escribir en ella, devolvemos error
return "Error: No se puede escribir en el directorio especificado";
}
// 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.
return "Error: Problema al subir el archivo";
}
return true;
}
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.