2

Sé que header("location: tiene que estar al principio del código para ejecutarse
Esa afirmación no es correcta.
header tiene que ser lo primero que se le envía al cliente. Es decir, mientras no le envíes un solo byte al cliente puedes hacer todas las operaciones que consideres oportunas.
L...