История изменений
Исправление r0ck3r, (текущая версия) :
По стандарту HTTP заголовки и тело ответа разделяет двойной символ новой строки. Так вот, если был произведен хоть какой-то вывод не при помощи header(), а при помощи echo, либо если твой файл с PHP-кодом начинается, упаси Господь, не с <?php, то тогда PHP в первый раз вставляет в вывод \r\n\r\n, что означает то, что мы теперь выводим тело ответа и с этого момента мы больше не можем отправлять заголовки. Если вывода никакого сделано еще не было, то мы можем свободно использовать header() столько раз, сколько хотим.
Фнукция ob_start(), а также опция output_buffering (может что-то еще) в php.ini могут переопределить это поведение, но так делать не стоит
Исходная версия r0ck3r, :
По стандарту HTTP заголовки и тело ответа разделяет двойной символ новой строки. Так вот, если был произведен хоть какой-то вывод не при помощи header(), а при помощи echo, либо если твой PHP-код начинается, упаси Господь, не с <?php, то тогда PHP в первый раз вставляет в вывод \r\n\r\n, что означает то, что мы теперь выводим тело ответа и с этого момента мы больше не можем отправлять заголовки. Если вывода никакого сделано еще не было, то мы можем свободно использовать header() столько раз, сколько хотим.
Фнукция ob_start(), а также опция output_buffering (может что-то еще) в php.ini могут переопределить это поведение, но так делать не стоит