Рішення проблеми Can not add header information - headers already sent

Помилку цю виправити нескладно.
Часто таке ж повідомлення з'являється при старті сесій, в трохи іншому формулюванні:
Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent
Для початку дізнаємося, як взагалі спілкується броузер з сервером. Відбувається це за спеціальним протоколом header (), setcookie , session_start() , посилають HTTP заголовки.

Розберемо тепер це попередження.
Warning: Cannot add header information - headers already sent by (output started at /www/script.php:5) on line 20
Cannot add header information - headers already sent . Все ясно написано. "Не можу послати заголовок, поїзд вже пішов" - пише нам РНР. Далі РНР повідомляє, в якому скрипті і в який його рядку ( output started at /www/script.php:5 ) стався висновок інформації, що викликав автоматичну посилку заголовків. Дуже легко знайти і виправити. Може бути, там html теги, може бути, echo, а може і просто непоміченим порожній рядок або пробіл перед першим тегом <? .
Дуже часто таку помилку викликає файл, що підключається через include , в якому або є якийсь висновок, або порожній рядок після закриваючого PHP тега - виявити її дуже важко.

Для вирішення цієї проблеми потрібно функцію header () (або session_start (), setcookie ) і всю логіку, яка її викликає, помістити ДО будь-якого виведення в броузер. Просто перенести вище в скрипті.
Адже ви все одно перенаправляє браузер. Тобто, ніякої текст все одно не буде виведений! Значить, і виводити щось одночасно з заголовком Location немає сенсу. Правильно плануйте структуру свого скрипта: блок, який обробляє POST, не повинен нічого виводити в браузер.

Іноді ви перевірили ВСЕ - ніде нічого немає. Змініть редактор. Подивіться свій файл в іншій програмі. Наприклад, Windows Блокнот при використанні кодування Unicode додає в початок вашого файлу службовий символ Byte Order Mark, ніяк при цьому не ставлячи до відома. Відкрийте скрипт в іншому редакторі і видаліть сторонні символи. І змініть Блокнот на інший редактор.

Численні питання на форумі змушують мене зробити тут важливе зауваження:
Ця помилка з'являється немає від того, що у вас в скрипті "що то написано вище". А від того, що РНР виводить щось в браузер. Це не обов'язково код. Це може бути повідомлення про помилку. може бути пробіл або хтмл тег. Так Так. Для найталановитіших: мова йде про будь-якому символі, відправленому в браузер, а не тільки про тих, які браузер відображає недосвідченому користувачу. У HTML сторінок є вихідний текст. І саме він є результатом роботи PHP скрипта, а не красиві літери з картиночками, як думає дуже велика кількість людей.

by phpfaq.ru