La funzione header() non deve essere preceduta da alcun output, altrimenti non funziona.
L'output non deve necessariamente essere generato dalla stessa pagina in cui è inserita la funzione, può anche essere generato dalla pagina in cui il file php è incluso.
Dal sito di PHP riguardo la funziona header()
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.