Cela provient probablement du buffer php
Vérifie (si tu y as accès) la valeur de output_buffering dans ton php.ini.
S'il est activé, php va stocker les données que tu envois au navigateur dans un buffer temporaire avant de les envoyer réellement. Ainsi, tant que le volume des données que tu envois au visiteur ne dépasse pas la taille du buffer (cad du output_buffering), rien n'est envoyé au navigateur.
Dans ce cas, les fonctions header(), session_start() et compagnie peuvent encore être appellées même si ton script a déjà généré des écritures (puisque php retient les données à envoyer). Mais comme il s'agit d'un paramétrage du serveur, mieux vaut que ton code n'en dépendent pas et continue à ne rien afficher avant un header()
