Ese error se presenta cuando, antes de enviar alguna cabecera http (que es lo que hace header), existe alguna salida para mostrar en pantalla. Esto "confunde" a php, ya que éste presupone que todas las cabeceras http ya han sido enviadas al momento de mostrar algo en pantalla, que es el proceso normal. Cuando hablamos de salida, no sólo hablamos de cosas visibles: pueden ser espacios en blanco, saltos de línea, tabulaciones, etc.
Para evitarlo, existen 2 caminos:
1)ordenar el código para que siempre se envíen las cabeceras antes que cualquier salida (hay que asegurarse de que no existan echos, blancos, saltos de línea, etc antes de cualquier header, o session_start o setcookie, que también envían cabeceras).
2)controlar el flujo de salida con ob_start y ob_end_flush o similares:
http://www.programacionweb.net/artic...ticulo/?num=77