C'est plustôt un probléme d'ordre d'envoie des données.
Un header comme son nom l'indique (en francais "entête" ) doit être envoyé avant tout caractére. A partir du moment le serveur envoie du texte au navigateur, php ne peux plus envoyer le moindre "header".
Face à ça, où tu modifies ton script pour ne rien envoyer au navigateur avant le dernier header où tu utilises un "buffer" à l'aide de fonctions comme "ob_start()" ce qui dit à php de mettre en cache le texte à envoyer au navigateur jusqu'a ce que tu lui dises de tout envoyer.
Voir documentation pour en savoir plus sur le cache : http://fr2.php.net/manual/fr/function.ob-start.php
PS : Attention avec les buffer, une fois remplis à raz bord, le contenu sera envoyer automatiquement afin de faire de la place pour la suite.