fait une recherche ob_start(), ob_end_flush(), ob_end_clean() sur php.net
ça te permettra d'utiliser un header() quoique tu aies fait avant.
ob_start() (première instruction sur ta page) stocke tout ce qui devrait être envoyé dans une variable et ne l'envoie que si tu appelles ob_end_flush().
Si tu veux envoyer un header(), utilises ob_end_clean() juste avant pour vider la variable, histoire de faire plus propre.