Вы не можете добавить новые заголовки при помощи функции header(), если заголовки уже были отправлены клиенту. Использование данной функции позволит вам лишь избежать сообщений об ошибках, связанных повторной отправкой HTTP-заголовков. Другой выход - использовать буферизацию вывода.
Пример кода
<?php
// Если заголовки еще не отправлены, добавить
if (!headers_sent()) {
header('Location: http://www.example.com/');
exit;
}
// Пример использования опциональных параметров, добавленных в PHP 4.3.0
// Обратите внимание, что $filename и $linenum передаются для последующего
// использования. Не устанавливайте их предварительно!
if (!headers_sent($filename, $linenum)) {
header('Location: http://www.example.com/');
exit;
// Обычно здесь идет обработка ошибок.
} else {
echo "Заголовки уже отправлены в $filename на строке $linenum\n" .
"Редирект невозможен, пожалуйста нажмите <a " .
"href=\"http://www.example.com\">Здесь</a> самостоятельно\n";
exit;
}
?>